ios - 环境对象的变化只通知订阅者一次
问题描述
我有一个应用程序,我在其中使用 firebase firestore 和快照侦听器。我使用 Observable Object 类来观察状态。此状态通知订阅视图,以便我删除该实例上的 snapshotListeners。我将它注入到我的视图层次结构中并在某些视图中使用它。我还有一个 signOut 方法,我允许用户注销这会更改下面的 didLogOut 属性。
这是我正在观察的经理
class StatusManager: ObservableObject{
@Published var didLogOut: Bool = false
}
这是我注销用户的地方
Button(action: {
isLoggedIn = false
lastLoggedEmail = ""
lastLoggedUserPassword = ""
lastLoggedUserType = ""
statusManager.didLogOut = true
try? Auth.auth().signOut()
navStack.pop(to: .root)
}, label: {
Text("Sign Out")
.font(Font.custom("Roboto-Light", size: 14))
})
问题是,当我退出时,它第一次起作用。订阅的视图会收到有关更改的通知,这会删除快照侦听器,并且用户通过 Auth.auth().signOut() 方法注销。但是,一旦我从注销返回登录屏幕,如果我第二次登录并尝试注销,则不会通知视图关于 didLogOut 中的更改。这会导致我的应用程序崩溃,因为用户通过 firebase 注销但侦听器仍然处于活动状态。侦听器无法访问该数据,因为用户未登录。导致此
Listen for query at adminData/melsaville5@gmail.com/drivers failed: Missing or insufficient permissions.
解决方案
用户重新登录时忘记将 didLogOut 重置为 false。
推荐阅读
- oracle - dbms_transaction.local_transaction_id 是否重复值?
- python - 如何在Python中按升序压缩递增的整数序列
- flutter - Flutter CheckBox issue
- python - 如何在谷歌云上运行生产中的某些代码行?
- javascript - NodeJS:如何创建一个唯一的出站电子邮件传递系统?
- android - 我在 React-Native 中遇到错误,无法从 `? 解析模块`./http://localhost:8081/index`
- python - 使用 python 比较 2 列,从第 3 列中找到 col1 和 col2 相同值的最大值,并将其作为新的第 3 列输出
- c# - 我应该如何在 Monogame 中制作光标视差效果?
- android - Android WebRTC:从新的 getStats() API 消费数据的标准方式是什么
- matrix - 如何围绕指定轴旋转 X 或旋转 Z 视图矩阵?