可可UI元素不更新
问题描述:
我有几个可可UI元素与出口连接到一个NSView对象内实例化的对象,然后由NSViewController放在那里。这些元素,一个明确的进度条和一个文本标签,并没有更新:尽管值不断变化,但进度条仍然是空的和空的,文本标签没有取消隐藏[textLabel setHidden:NO],文本标签不会更改它的字符串。可可UI元素不更新
我所知道的:
- 有约束力的值,并在代码中设置它们之间没有什么区别。没有任何变化。
- 我已检查出口连接。他们都在那里。
- 我试过[X displayIfNeeded],其中X一直是UI对象本身,包含NSView和主窗口。没有不同。
- [progressBar setUsesThreadedAnimation:YES]没有区别。有趣的是,如果我看着progressBar中期计划,_threadedAnimation仍然没有。
- 持有所有这些插座并执行导入操作的对象位于NSViewController对象拥有的NSOperationQueue中。
谢谢!
编辑:建议我调用[self performSelectorOnMainThread:@selector(updateProgress :) withObject:[NSNumber numberWithInt:myObject] waitUntilDone:NO]。 (我也尝试了waitUntilDone:YES。)它仍然没有更新。调试器清楚地显示updateProgress:发生在主线程中,所以我不知道缺少什么。
答
全部NSOperation
任务在不同的线程中执行。由于AppKit不是线程安全的,因此您不能从单独的线程修改UI。您将需要使该修改用户界面的任何调用主线程使用的方法进行重构你的代码:
- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
这难道不是确定呼叫的定义的NSOperation选择?例如[self performSelectorOnMainThread:@selector(updateProgress :) withObject:myObject waitUntilDone:YES];我正在尝试这个,我没有得到任何改善。我在我的应用程序控制器中有这个选择器,但是,呃...我不知道如何将它连接到这个对象。 :/ – spamguy 2010-04-22 06:44:28