我正在编写一个自定义的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]; });
然而,我得到一个没有任何动作和闪烁的灰色屏幕(表明我已经引起了异常)的混合。
任何想法?(注意:当我尝试各种选项时,我会编辑这个问题)
我认为你所需要做的就是把标签的更新放在主队代码中,像这样:
dispatch_async(dispatch_get_main_queue(), ^{
label.text = "Hello World!";
});