ios - 在侦听器不断触发后,Firestore 无法获取完整文档
问题描述
好的,发生了一些非常奇怪的事情。有一个即将投入生产的应用程序。这就是应用程序的功能
- 有一个主页,每次应用程序进入前台时都会获取登录用户的文档
- 这不是一次获取,而是一次
listener
,因此它还会在应用程序处于前台时侦听更改 - 我使用这种机制来保持用户文档是最新的并将其传递到应用程序中的其他页面
- 当应用程序进入后台时,我删除了
listener
- 用户文档有近30 个字段
所以我在模拟器的应用程序中测试另一个功能,一切正常。我在真实设备上登录的同一用户并行运行该应用程序,这是构建后发生的情况:
- 当应用程序出现在前台时,
listener
被解雇的人没有停下来。我有这样的代码,每次监听器从firestore获取文档时,主页的一部分都会动画。所以从技术上讲,主页会不停地刷新 - 我杀死了该应用程序并重新构建了它,并且再次发生了连续的 Firestore 获取
- 所以我一起删除了该应用程序并重新构建它 - 现在连续的 Firestore 提取停止了
这是问题:
- 该文件包含所有
Firestore 上的 30 个字段
- 但在真实设备上,它只获取 2 个字段
- 我尝试重新安装和重建很多次,但这是状态
但是在同一用户登录的模拟器上,它工作正常。
可能是什么问题?这个特定用户是否有一些损坏的缓存?Firestore 是一款可靠的产品,因此以前从未遇到过这样的事情。
这是监听器代码:
@objc func viewEntersForeground(){
guard let currentUid = Auth.auth().currentUser?.uid else {return}
let ref = Firestore.firestore().collection("users").document(currentUid)
userListener = ref.addSnapshotListener({ (snapshot, error) in
if let error = error{
let alertController = ErrorAlertController(errorText: "\(error.localizedDescription)", errorTitle: "Something's wrong", viewController: self)
alertController.showAlertController()
return
}
//THE BELOW DICTIONARY FETCHES ONLY TWO FIELDS
guard let dictionary = snapshot?.data() else {return}
self.userDictionary = dictionary
self.user = User(dictionary: dictionary)
self.checkIfUserExists()
if self.user?.uid == "" || self.user?.uid == nil {
return
}
self.passDataToInbox()
self.passDataToSettings()
self.checkIfFirTokenExists()
self.checkIfProfilePictureExists()
if self.user?.userState == 3{
self.isUserState3 = true
} else {
self.userState = self.user?.userState
}
})
}
解决方案
推荐阅读
- javascript - 如何在jquery ajax中向成功函数发送附加参数
- java - 重置游戏以在java中重新开始
- python - 覆盖字符串列表中属性的 getter 和 setter
- php - 为什么我不能在带有约束的急切加载关系上 orderBy()?
- wpf - WPF - ToggleButton 模板触发器在第一次调用后停止触发
- java - 从带有参数的 Spring REST 控制器重定向
- javascript - 使用javascript的map函数,如何从数组中返回所需格式的数据?
- php - 如何检查数组内具有相同字段名称的多个值
- unit-testing - 在 Go-kit 中为 make 处理函数编写单元测试
- forms - 打开表单以在 ComboBox 上选择一个值 - Ms Acces