如何解决iOS Firebase RTDB观察器-删除不再存在的路径的观察器
因此,下面的方法正在观察用户节点是否存在。当该用户在另一台设备上删除其帐户后,将强制该用户注销。
问题很简单-删除该节点后,属于该节点的观察者也将被删除,而无需手动删除该观察者? 否则,我认为不可能删除该观察者,因为该特定节点不存在。任何建议将不胜感激!
internal var userReference: DatabaseReference?
// EDITED : Add handler
internal var userReferenceHandle: DatabaseHandle?
// EDITED
func authStateObserver(completion: @escaping () -> Void) {
guard let uid = Auth.auth().currentUser?.uid else { return }
userReference = REFERENCE_USERS.child(uid)
userReference?.observe(.value,with: { (snapshot) in
print("deleted node: \(snapshot)")
if !snapshot.exists() {
print("snapshot does not exist and user has been deleted. Completion block should be implemented")
// EDITED: Add remover as below
self.userReference?.removeObserver(withHandle: self.userReferenceHandle!)
// EDITED
completion()
} else {
print("snapshot exist")
}
},withCancel: nil)
}
编辑:由于Puff的建议,观察者在完成工作后现在被撤职。使用任意节点进行测试,以查看是否已将其正确删除。如果有人需要的话,请参考上面的引文////编辑。
解决方法
删除节点后,观察者将保持活动状态,因为以后有人可能会重新创建该节点。
如果要删除观察者,则必须从代码中删除,方法是在附加观察者时保留其句柄。有关更多信息,请参见detaching listeners上的Firebase文档或此答案中的代码:Firebase 'Observe' called multiple times with Swift on iOS
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。