ios - 使用 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)
函数内部崩溃呢?
解决方案
火力基地在这里
虽然 Firebase SDK 在后台线程上执行其网络和其他 I/O,但它实际上在主线程上调用您的回调。
但似乎getData
在这里没有这样做,这是一个错误。因此,感谢您了解并报告这一点。
我在 Github 存储库上提交了错误#8245 ,因此请检查那里的进度。
推荐阅读
- python - 在使用 ChromeDriver 访问应用程序和使用 Selenium 访问应用程序时,在访问消息之前检查您的浏览器
- elasticsearch - Elastic v.7 - 按非索引字段过滤的无痛脚本
- swift - 快速获取连接的 Apple Watch 详细信息
- java - Dispatcher servlet 上下文在 Spring 上下文刷新后创建 bean,而不是使用“父”的
- arrays - 将 Google Apps 脚本中生成的数组传递给 HTML 页面并用于基本导航
- python - 如何处理来自 Django App 的多个请求?
- google-sheets-formula - 在 XIRR 中结合两组数据
- angular - 重置角度表中所有选定按钮的颜色
- android - firebase 分析未显示来自 android 的自定义事件日志
- javascript - 如何从 Unicode 字符集中解析表情符号?