2012-01-12 82 views
0

我有一個在Mac上用xcode/cocoa編寫的應用程序。 使用[label setStringValue]每次出現重循環時,主窗口上的標籤都會更改,但僅在循環結束時刷新。 我怎樣才能在每次發生時刷新它?循環中的刷新窗口

謝謝!

回答

1

你應該使用一個隊列。你的重循環backgroundQueue和[label setStringValue] mainQueue

例子:

dispatch_queue_t backgroundQueue = 
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

dispatch_queue_t mainQueue = dispatch_get_main_queue(); 


dispatch_async(backgroundQueue,^{ 
//Your loop 

    dispatch_async(mainQueue,^{ 
    //Set Label value 
    }); 

}); 
+0

NSAutoreleasePool不是阻止主循環的解決方案!解決方案是有一個新的線程來完成工作(循環)並更新主循環中的標籤。 – 2012-01-13 07:04:48

+0

我也很傷心......和queque一起..看看這個! 「而且你也可以使用隊列。你在mainQueue中的backgroundQueue和[label setStringValue]中的重循環應該工作。」 – 2012-01-13 07:07:56

+0

你說「你應該使用NSAutoreleasePool」,這是錯誤的作爲他的問題的答案。 「你也可以使用隊列」只是你的第二個暗示,而不是很強。 – 2012-01-13 07:10:44

1

你的問題是,你在主線程工作(循環)。主線程負責更新用戶界面,不得被阻止!

您需要開始一個新線程來完成繁重的工作並在主線程上更新您的UI。

你應該看看GCD,這是一個很好的輕量級解決方案,或者看看performSelector方法。