首页 > 解决方案 > 我的 Firebase 观察者不会停止观察

问题描述

在我的:

override func viewWillAppear(_ animated: Bool) 

我这样创建我的 Firebase 观察者:

poolsRef.child(pID).child("lock").observe(.value, with: { snapshot in

boxesRef.child(pID).observe(.value, with: { snapshot in

coordRef.child(pID).child("x").observe(.value, with: { snapshot in

coordRef.child(pID).child("y").observe(.value, with: { snapshot in

poolsRef.child(pID).child("Winner").observe(.value, with: { snapshot in

playersRef.child("pID").observe(.value, with: { snapshot in

然后在

override func viewDidDisappear(_ animated: Bool)

我调用 removeAllObservers:

coordRef.removeAllObservers()

poolsRef.removeAllObservers()

boxesRef.removeAllObservers()

playersRef.removeAllObservers()

问题是,当我离开创建所有观察者的视图时,甚至认为 removeAllObservers() 被调用时,viewDidDisappear我完全不是一个不同的视图,如果我直接转到 Firebase 并更改之前的数据与上面提到的观察者有关,我可以看到应用程序仍在侦听不应该的时候!?

我该如何解决这个问题!!

标签: iosswiftfirebasefirebase-realtime-databaseobservers

解决方案


来自 文档

在侦听器上调用 removeObserverWithHandle 或 removeAllObservers 不会自动删除在其子节点上注册的侦听器;您还必须跟踪这些引用或句柄以删除它们。

poolsRef.child(pID).child("lock").removeAllObservers()
poolsRef.child(pID).child("Winner").removeAllObservers()

与其他观察者依此类推


推荐阅读