2012-06-20 132 views
0

我有一個簡單的目錄應用程序,可讓用戶從管理網站下載產品數據。UITextView更新阻止

當用戶按下按鈕啓動下載

- (IBAction)downloadProducts:(id)sender { 
    outputText.text = @"Downloading data, please wait..."; 
    [Product loadData:outputText]; 
    outputText.text = @"Ok, download complete."; 
} 

的outputText下面的代碼被觸發的是,應該讓用戶知道發生了什麼事情一個UITextView。

Product類中有一個處理下載的靜態方法。這一切工作正常,唯一的問題是輸出到uitextview塊,直到下載完成。

即。直到[Product loadData:outputText];之後纔會顯示「正在下載數據,請稍候...」消息;完成並立即與下載完整的消息覆蓋...

任何幫助非常讚賞,

感謝

吉姆

回答

2

是,更新用戶界面將您的下載請求時被阻止。您可能需要調用之前等待[產品loadData:的outputText],可使用

[self performSelector:@selector(someMethod:) withObject:nil afterDelay:1.0]; 

完成並投入

[Product loadData:outputText]; 
outputText.text = @"Ok, download complete."; 

該方法。

或者對於最佳做法,請在不同的線程或使用塊開始下載。這允許您在下載過程中不斷更新用戶界面(請注意,只能在主線程/隊列中更新用戶界面)

+0

感謝您使用簡單的「不是最佳實踐」的方式。歡呼jx – jx12345

1

由於您正在加載以響應用戶操作,因此可能會調用此方法main thread。刷新屏幕只能在主線程上進行。所以,當主線程忙於加載數據時,它不能同時繪製文本視圖。

對此的一個解決方案是啓動後臺線程來執行加載。

+0

感謝您的快速回復,在跳入下一行代碼之前,主線程如何不完成對uitextview的更新? – jx12345