我已經嘗試了一些塊,他們似乎在主線程中調用,這意味着可以在那裏進行任何UI更改。我已經習慣了測試的代碼看起來是這樣的:
func reloadPosts() {
PFObject.fetchAllIfNeededInBackground(posts) {
[unowned self] (result, error) in
if let err = error {
self.displayError(err)
}
self.tableView.reloadData()
}
}
如果你是在有關被稱爲主線程塊是否可以使用NSThread
類檢查此
print(NSThread.currentThread().isMainThread)
疑問
如果你希望它是防彈你可以用你的reloadData
內dispatch_block_t
以確保它是在主線程
編輯: 如果塊主線程上執行文檔沒有任何地方的狀態,但source code是很清楚,它確實
+ (void)fetchAllIfNeededInBackground:(NSArray *)objects block:(PFArrayResultBlock)block {
[[self fetchAllIfNeededInBackground:objects] thenCallBackOnMainThreadAsync:block];
}
即使我用fetchInBackgroundWithBlock它不會幫助,只要我想所有的人要完成更新我的UI數據 –
真的嗎?通常情況下,您逐漸更新用戶界面,因爲每一個加載。 – Michael
我使用它的方式我不需要將'self.tableView.reloadData()'調度到主隊列。我從我的'viewDidLoad()'func調用'fetchData()',所以也許如果你從其他地方調用它,你需要發送'self.tableView.reloadData'到主隊列 – MikeG