我的Firebase观察者不会停止观察

时间:2018-12-24 23:26:44

标签: ios swift firebase firebase-realtime-database observers

在我的

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()

问题是,当我离开创建所有观察者的视图时,甚至认为viewDidDisappear中调用了removeAllObservers()时,我完全不是一个不同的视图,如果我直接进入Firebase并进行与上述观察者相关的数据发生了变化,我可以看到该应用程序仍在监听不应该的!

我该如何解决这个问题!

1 个答案:

答案 0 :(得分:2)

来自Docs

  

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

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

以此类推,与其他观察者