我正在编写一个自定义AuthenticationPlugin,它有一些动态内容(目前采用标签的形式)。我希望能够根据事件更新标签。
假设以下声明:
parent = SFAuthorizationPluginView (subclass)
view = NSView (subclass)
NSTextField *label = ...
我按如下方式编辑标签文本(注意:这可以从后台调度队列中执行):
[label setStringValue:@"new text"];
然后我尝试使用以下内容强制更新:
[label setNeedsDisplay:YES];
dispatch_async(dispatch_get_main_queue(), ^{ [label setNeedsDisplay:YES]; });
[label display];
dispatch_async(dispatch_get_main_queue(), ^{ [label display]; });
[[label cell] update];
dispatch_async(dispatch_get_main_queue(), ^{ [[label cell] update]; });
[[label cell] needsDisplay];
dispatch_async(dispatch_get_main_queue(), ^{ [[label cell] needsDisplay]; });
[view setNeedsDisplay:YES];
dispatch_async(dispatch_get_main_queue(), ^{ [view setNeedsDisplay:YES]; });
[self updateView];
dispatch_async(dispatch_get_main_queue(), ^{ [self updateView]; });
[self displayView]
dispatch_async(dispatch_get_main_queue(), ^{ [self displayView]; });
然而,我得到了一个没有动作和闪烁灰色屏幕的混合物(表示我已经引起了异常)。
有什么想法吗? (注意:当我尝试各种选项时,我会编辑这个问题)
答案 0 :(得分:2)
我认为您需要做的就是将标签的更新放在主队列代码中,如下所示:
dispatch_async(dispatch_get_main_queue(), ^{
label.text = "Hello World!";
});