当我们从 FireStore 检索数据时,tableview.reloaddata() 仍然在 Dispatchqueue.main.sync 之外工作

阿基夫

规则是“如果您更新在另一个线程中工作的闭包内的用户界面,那么您应该调用 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("There was an issue retrieving data from 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()
            }
        }
    }
}
弗兰克·范·普费伦

Firestore SDK(和大多数 Firebase SDK)在主线程上调用您的回调,以便您可以轻松更新 UI。它们过渡到主线程,因此您不必这样做。

也可以在这里看到我的回答:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么 Dispatchqueue.main.async 仍然在主线程执行阻塞?

使用 DispatchQueue.main.sync 时应用程序崩溃

无人认领的工作仍然在退出时停止

当我仍然在页面HTML / CSS上单击时,丢失底部边框颜色

DispatchQueue.main.async和DispatchQueue.main.sync之间的区别

仅当我们在模态内容之外单击时,才关闭覆盖

Elastic Search delete_by_query如何工作?当我们插入新数据并在删除文档时检索相同数据时会发生什么?

当我们在向量上使用唯一函数时,移位如何工作?

当我们使用IF NOT EXIST时,LWT-轻量级交易如何工作?

我给传递参数到函数仍然在添加链接列表时仍然给出错误代码缺少参数

当我们在框架环境中谈论单例模式时,它仍然很糟糕吗?

为什么我们仍然在Groovy / Grails中使用package关键字?

当我使用 where 时 Firestore 不会检索我的数据

当我们在特定的子工作表上进行编辑时,将运行Google工作表脚本

DispatchQueue.main.sync返回exc_bad_instruction Swift 3

当我们有数字和字符串时,>> 运算符如何工作

当我们尝试使用@Value注释访问appliction.properties中的值时,trim()无法正常工作

当我们在IIS 8.0中部署时,Asp.Net应用程序无法正常工作

如何让 tableView.reloadData() 与核心数据正常工作?

未调用DispatchQueue main

当我们说在执行程序时将操作系统的控制权传递给main()函数时,这是什么意思?

我是否需要DispatchQueue.main.async中的autoreleasepool块

弱到强引用仍然在查找时崩溃

当我们有ViewModels时,我们还需要onSaveInstanceState()吗?

当我们谈到 RPC 时,我们指的是 Windows 上的特定技术吗?

当我们需要修剪时,我们不需要在oracle中

当我们关闭开关时,我们如何取消选择该行

_tableView reloadData使我的应用程序崩溃

在 Swift 中,如果 Thread.current.isMainThread == false,那么 DispatchQueue.main.sync 递归一次是否安全?