在我的应用程序中,我获取如下实时数据:
//Firebase
var ref: FIRDatabaseReference?
var handle: FIRDatabaseHandle?
override func viewDidLoad() {
ref = FIRDatabase.database().reference()
handle = ref?.child("posts").child(String(itemId)).observe(.childChanged, with: { (snapShot) in
if let item = snapShot.value as? String {
print(item)
}
})
.....
现在阅读 firebase 文档,我看到了这一点:
当您离开 ViewController 时,观察者不会自动停止同步数据。如果观察者没有被正确删除,它会继续将数据同步到本地内存。
所以我添加了这个函数,当我退出 VC 时该函数会被触发:
@IBAction func backButtonDidTouch(_ sender: AnyObject) {
if let handle = handle {
ref?.removeObserver(withHandle: handle)
}
showNavBar = true
_ = navigationController?.popViewController(animated: true)
}
但我也可以在 removeObserver()
的 insetad 中调用 removeAllObservers()
并且文档还说:
在监听器上调用removeObserverWithHandle
或removeAllObservers
不会自动删除在其子节点上注册的监听器;您还必须跟踪这些引用或句柄以将其删除。
那么看看我的代码我做得对吗?当我退出 VC 时,我不想在应用程序和 Firebase 之间保持数据同步
最佳答案
您似乎在特定帖子上调用观察者,但您正在从父引用中删除观察者。正如文档所述,从引用中删除监听器并不会清除子级中的观察者,因此我相信您没有按预期删除观察者。
关于ios - Firebase 数据库分离监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43461191/