我的 Firebase 观察者不会停止观察
My Firebase Observers will not stop Observing
在我的:
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并更改与上述观察者相关的数据,我可以看到该应用程序在不应该听的时候仍在听!?
我该如何解决这个问题!!
来自Docs
Calling removeObserverWithHandle or removeAllObservers on a listener does not automatically remove listeners registered on its child nodes; you must also keep track of those references or handles to remove them.
poolsRef.child(pID).child("lock").removeAllObservers()
poolsRef.child(pID).child("Winner").removeAllObservers()
与其他观察者依此类推
在我的:
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并更改与上述观察者相关的数据,我可以看到该应用程序在不应该听的时候仍在听!?
我该如何解决这个问题!!
来自Docs
Calling removeObserverWithHandle or removeAllObservers on a listener does not automatically remove listeners registered on its child nodes; you must also keep track of those references or handles to remove them.
poolsRef.child(pID).child("lock").removeAllObservers()
poolsRef.child(pID).child("Winner").removeAllObservers()
与其他观察者依此类推