8
我試圖獲得一個twitter賬戶列表來加載一個包含數據的UITableViewController。我用這個功能:(iOS 5)當獲取Twitter賬戶列表時,TableView掛起?
- (void)viewDidLoad {
[accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
...
[[self tableView] insertRowsAtIndexPaths ...];
[[self tableView] reloadData];
NSLog("This message appears immediately");
...
}];
NSLog("This message appears immediately");
}
出於某種原因,該接口似乎表實際上被更新/重繪前「掛」 5秒(注意,我打電話reloadData!)。我所有的日誌消息都會立即打印出來,所以我不確定是什麼導致界面凍結。
問題是UI調用必須發生在主線程上,'-requestAccessToAccountsWithType:withCompletionHandler:'不能保證它的完成塊會在主線程上被調用。你在這裏使用'dispatch_async'是正確的,但是如果你在你的UI調用之前有更多的處理要做,那麼你可以在'dispatch_async'調用之前在後臺隊列中自由地執行它。 –
感謝隊友,與另一種觀點推遲了相同的問題。這爲我解決了它。 – thgc
Apple的示例代碼使用performSelectorOnMainThread:withObject:waitUntilDone:處理處理程序方法在任意隊列上執行的事實。 – sam