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
是唯一的,并且解决了时序问题!
我正在尝试通过调用以下命令来设置 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
是唯一的,并且解决了时序问题!