【问题标题】:My Firebase Observers will not stop Observing [duplicate]我的 Firebase 观察者不会停止观察 [重复]
【发布时间】:2019-05-23 21:44:46
【问题描述】:

在我的:

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 并进行更改关于与上述观察者相关的数据,我可以看到应用程序仍在侦听不应该的时候!?

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

【问题讨论】:

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


    【解决方案1】:

    来自Docs

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

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

    与其他观察者以此类推

    【讨论】:

    • 我不需要对observeSingleEvent 做任何事情,对吗?!与向 Firebase 的写入相同...我现在只想确定!
    • observeSingleEvent 只听一次,但observe 会一直听,直到你移除观察者
    猜你喜欢
    • 2018-04-18
    • 2022-11-17
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多