iOS Firebase RTDB 观察者 - 删除不再存在的路径的观察者
iOS Firebase RTDB observer - remove observer for the path which is NOT existing any longer
所以下面的方法是观察用户节点是否存在。当另一台设备上的用户删除了 her/his 帐户时,强制用户注销。
问题很简单,那个节点被删除后,属于那个节点的观察者也被删除了,不需要手动删除那个观察者?
否则,我认为不可能删除该观察者,因为该特定节点不存在。任何建议将不胜感激!
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 的建议,观察员现在在完成工作后被移除。使用任意节点进行测试以查看它是否已正确删除。如果有人需要,请参考上面引用的 //EDITED 中的插入内容。
删除节点后观察者将保持活动状态,因为稍后可能有人会重新创建该节点。
如果您想移除观察者,则必须通过在附加观察者时保留观察者的句柄来从代码中移除观察者。有关详细信息,请参阅 detaching listeners or the code in this answer:
上的 Firebase 文档
所以下面的方法是观察用户节点是否存在。当另一台设备上的用户删除了 her/his 帐户时,强制用户注销。
问题很简单,那个节点被删除后,属于那个节点的观察者也被删除了,不需要手动删除那个观察者? 否则,我认为不可能删除该观察者,因为该特定节点不存在。任何建议将不胜感激!
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 的建议,观察员现在在完成工作后被移除。使用任意节点进行测试以查看它是否已正确删除。如果有人需要,请参考上面引用的 //EDITED 中的插入内容。
删除节点后观察者将保持活动状态,因为稍后可能有人会重新创建该节点。
如果您想移除观察者,则必须通过在附加观察者时保留观察者的句柄来从代码中移除观察者。有关详细信息,请参阅 detaching listeners or the code in this answer: