2011-09-03 35 views
0

我有一個按鈕被按下時爲IBAction爲:爲什麼我的界面對象不按順序響應?

- (IBAction)importButtonClicked:(id)sender 

而且我要的一系列事件的發生,如:

[_progressLabel becomeFirstResponder]; // I tried this but to no effect 
_progressLabel.stringValue = BEGIN_IMPORT_STRING; 
[_importButton setEnabled:FALSE]; 
_fileField.stringValue = @""; 
[_progressIndicator startAnimation:nil]; 

但是最終發生的是_progressIndicator動畫發生在出現_progressLabel文本之前。通常情況下,文本不會直到_progressIndicator動畫已停止。我如何解決這個問題?

+0

如果你把代碼放在'[CATransaction begin]'和'[CATransaction commit]'之間,它有幫助嗎?假設你使用的是Core動畫操作系統版本。 – lbergnehr

+0

CATransaction不被識別,但我認爲你正在做的事情。問題不在於這個代碼塊,而在於下一個代碼塊佔用了所有的資源,並且這個代碼塊在完成之前還沒有完成。但我只是在xib文件中使用Appkit。 –

+0

您是否在同一個線程上同步執行「繁重」工作?在這種情況下,它會阻止用戶界面,你可能得不到你想要的行爲。 – lbergnehr

回答

2

把你正在做的工作放在一個單獨的線程上,這需要花費時間(我認爲這就是進度指示器的作用)。您不必在Cocoa中手動執行此操作,而是使用Grand Central Dispatch(GCD),NSOperationQueue或此類可用構造。你會在GCD上找到很多資源。

相關問題