2010-07-07 127 views
2

我的應用程序有一個按鈕,當它被點擊時,它被禁用,活動指示器顯示,後臺任務被執行。此任務完成後,回調會通過啓用按鈕並刪除活動指示器來更新界面。我遇到的問題是任務完成回調函數被執行,但是一段時間活動監視器保持在屏幕上,按鈕看起來像被禁用,但可以再次單擊它。誰能告訴我我要去哪裏?iPhone UIView沒有立即更新

非常感謝!

+0

你可以發佈一些代碼嗎? – taskinoor 2010-07-07 10:39:58

+0

我會嘗試提取一些代碼,這是我們在某種程度上繼承的應用程序的一部分。 儘管它做了什麼快速總結。按鈕動作將一個NSInvocationOperation推到一個NSOperationQueue上,當方法被執行時它將一些音頻文件拼接在一起,最後一件事是回調UIViewController類,該類將按鈕控件上的enabled屬性設置爲'YES',並調用'stopAnimating '在活動指標上。 再次感謝。 – Sjblack 2010-07-07 11:05:11

回答

2

難道是回調方法正在一個單獨的線程中執行嗎? 我在問,因爲任何對視圖有影響的調用都應該在主線程上執行。

問題可能這樣做可以解決如下:

  1. 創建處理您的UI相關的代碼,並得到您的回調方法中調用
  2. 的UI相關的代碼必須執行的一個方法主線程

它可能看起來像這樣有點:

//gets called asynchronously when your operation has completed 
-(void)myCallbackHandler { 
    [self performSelectorOnMainThread:@selector(updateUI) withObject:nil 
                 waitUntilDone:NO]; 
} 

-(void)updateUI { 
    [myActivityIndicatorView stopAnimating]; 
    [myButton setEnabled:YES]; 
} 
+0

Hey Sam, 幾分鐘前,我明白了這一點。非常感謝答案證實了我的想法。 乾杯Sj – Sjblack 2010-07-07 11:30:04

+0

不客氣! – samsam 2010-07-07 11:47:11