在我的
中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并进行与上述观察者相关的数据发生了变化,我可以看到该应用程序仍在监听不应该的!
我该如何解决这个问题!
答案 0 :(得分:2)
来自Docs
在侦听器上调用removeObserverWithHandle或removeAllObservers不会自动删除在其子节点上注册的侦听器。您还必须跟踪这些引用或句柄以将其删除。
poolsRef.child(pID).child("lock").removeAllObservers()
poolsRef.child(pID).child("Winner").removeAllObservers()
以此类推,与其他观察者