2010-04-21 80 views
0

我有幾個可可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:發生在主線程中,所以我不知道缺少什麼。

回答

0

全部NSOperation任務在不同的線程中執行。由於AppKit不是線程安全的,因此您不能從單獨的線程修改UI。您將需要使該修改用戶界面的任何調用主線程使用的方法進行重構你的代碼:

- (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait 
+0

這難道不是確定呼叫的定義的NSOperation選擇?例如[self performSelectorOnMainThread:@selector(updateProgress :) withObject:myObject waitUntilDone:YES];我正在嘗試這個,我沒有得到任何改善。我在我的應用程序控制器中有這個選擇器,但是,呃...我不知道如何將它連接到這個對象。 :/ – spamguy 2010-04-22 06:44:28