規則是:"如果你在一個在另一個執行緒中作業的閉包內更新用戶界面,那么你應該呼叫DispatchQueue.main.async方法。然而,在我從Firestore獲取資料后,tableview.reloadData()在沒有DispatchQueue.main.async方法存在的情況下仍然作業,而且它在閉包內的MainThread作業。這怎么可能呢?有什么變化嗎?Xcode版本12.4;Swift版本5
func loadMessages(){
messages = [] 。
db.collection(K.FStore.collectionName).getDocuments { (querySnapShot, error)in
if let err = error {
print("從Firestore檢索資料時出現了問題。(err)")
}else{
if let snapShotDocuments = querySnapShot?.documents{
for doc in snapShotDocuments{
let data = doc.data()
if let messageSender = data[K.FStore.senderField] as? String,let messagebody = data[K。 FStore.bodyField] as? String{
let newMessage = Message(sender: messageSender, body: messagebody)
self.messages.append(newMessage)
}
}
}
if Thread.isMainThread{
self.tableView.reloadData()
}
}
}
}
uj5u.com熱心網友回復:
Firestore SDK(以及大多數Firebase SDK)在主執行緒上呼叫你的回呼,正是為了讓你能夠輕松更新UI。他們過渡到主執行緒,這樣你就不必這樣做了。
請看我的回答:
- Firebase異步函式,什么在后臺佇列中,什么不在
- Firebase iOS在后臺執行緒上執行 。
- Firebase signInWithEmail函式是否在主執行緒中運行?
- 我們是否需要使用后臺執行緒來使用Firebase檢索資料?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/333988.html
標籤:
