首页 > 解决方案 > 使用 Firebase 时,我应该什么时候在主线程上进行用户界面工作?

问题描述

我听说从 Firebase 读取数据时,我应该始终在主线程上进行用户界面工作。

我尝试self.tableView.reloadData在 Firebaseobserve(.value)函数内的后台线程上执行操作,并且该应用程序没有崩溃或冻结。

databaseReference.observe(.value) { [weak self] snapshot in
        guard let self = self else { return }
        self.tableView.reloadData()
}

我试图在getData函数内部而不是observe(.value)函数内部做同样的工作,应用程序崩溃了。

databaseReference.getData { [weak self] error, snapshot in
        guard let self = self else { return }
        self.tableView.reloadData()
}

那么为什么应用程序在getData函数内部崩溃并且它没有在observe(.value)函数内部崩溃呢?

标签: iosfirebasefirebase-realtime-database

解决方案


火力基地在这里

虽然 Firebase SDK 在后台线程上执行其网络和其他 I/O,但它实际上在主线程上调用您的回调。

但似乎getData在这里没有这样做,这是一个错误。因此,感谢您了解并报告这一点。

我在 Github 存储库上提交了错误#8245 ,因此请检查那里的进度。


推荐阅读