Firebase 观察器不工作,为什么它不监视值的变化?

Firebase observer not working, why won't it keep a watch on the value change?

我正在尝试通过调用以下命令来设置 Firebase 观察器:

ref.child(id).child("isLocked").observe(.value, with: { snapshot in

    print("isLocked = ", snapshot.value!)

})

当视图加载时,它工作得很好。它打印出正确的值。

当我在 Firebase 本身或单独的设备上更改值时,isLocked 永远不会再打印出来。应该是什么时候,因为我在路上有一个观察者。给出了什么?

这里的最终目标是根据 lock 值是真还是假,让 UIButton 可用。

视图加载了 button.isHidden = true

更新

我发现问题的根源不是 "Working"

看来是时间问题。

在之前的视图控制器中(进入新的视图控制器)我在 'viewDidDisappear' 函数中调用 ref.child(pID).child("isLocked").removeAllObservers()

并且在新的视图控制器中我'trying'设置相同的路径观察器'ref.child(id).child("isLocked").observe(.value, with: { snapshot in'

我猜 removeAllObservers() 胜过新观察者的设置!?我该如何克服这个问题!?

试试这个:

ref.child(id).observe(.childChanged, with: { snapshot in

    if snapshot.key == "isLocked" {
        if let value = snapshot.value as? Bool {
            print(value)
        }
    }
})

我发现问题的根源不是 "Working"

看来是时间问题。

在之前的视图控制器中(进入新的视图控制器)我在 viewDidDisappear 函数中调用 ref.child(pID).child("isLocked").removeAllObservers()

并且在新的视图控制器中我'trying'设置相同的'path observer'ref.child(id).child("isLocked").observe(.value, with: { snapshot in

我猜 removeAllObservers() 胜过新观察者的设置!?

要解决这个问题,您需要为每个观察者设置特定的句柄!确保使用唯一的 var 名称并且不重复使用,然后调用以下而不是 removeAllObservers():

ref.child(id).child("isLocked").removeObserver(withHandle: confirmVCRefHandle!)

上面的句柄名称confirmVCRefHandle是唯一的,并且解决了时序问题!