【问题标题】:NSTextfield not getting updated when called from another class从另一个类调用时,NSTextfield 没有得到更新
【发布时间】:2012-01-05 19:02:36
【问题描述】:

我有一个 runthis.h 文件,其中有一个标签:

IBOutlet NSTextField *updateStatus;

现在在我的 runthis.m 文件中,在一个名为 startTest 的类中,我使用它来更新它

-(IBAction) startTest:(id)sender {
        [updateStatus setStringValue:@"Testing"];
}

现在如果我在另一个文件 testing.m 中为 runthis 类创建一个对象,然后试试这个:

 runthis *testSomething = [[runthis alloc] init];
[testSomething performSelectorInBackground:@selector(startTest:) withObject:nil];

但是当我从 testing.m 调用它时,我发现标签 *updateStatus 的 UI 永远不会设置为“正在测试” 如果我直接从 runthis.m 调用它,那么 UI 会按预期更新。任何想法为什么?谢谢。

【问题讨论】:

标签: cocoa uilabel nstextfield


【解决方案1】:

除非runthis 位于单独的笔尖,否则它的插座不会自动连接,您必须将其作为参考传递。在testing 中,您必须连接文本字段,然后将其传递给runthis,例如:

[testSomething setStatusField:updateStatus];

或者,您可以从您的 runthis 对象创建对您的 testing 对象的引用(称为委托)并让 testing 直接更新 UI。这就是我会使用的方法。

【讨论】:

  • 我不明白你评论的最后一部分。我将如何创建一个参考。从 runthis 到测试对象并直接更新 UI ?
  • @ZionKing:向您的runthis 对象添加一个属性,该对象采用testing 对象或符合runthis 声明的协议的东西。让testing 符合协议(如果你这样做的话)并将自己设置为runthis 的代表。当runthis 需要更改字段的值时,让它向其委托发送消息,并让testing 对象通过获取runthis 对象的statusField 并设置其值来响应该消息。
  • 我还不确定。有没有例子?感谢并感谢所有的帮助和耐心:)。
猜你喜欢
  • 2015-03-03
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多