关于ios:ObserveSingleEvent效果不好

ObserveSingleEvent does not work good

我的实时数据库如下:

enter

1
2
3
4
5
6
7
private lazy var runningGamesRef: FIRDatabaseReference = FIRDatabase.database().reference().child("RunningGames")
 self.runningGamesRef.observeSingleEvent(of: .value, with: { (snapshot) -> Void in
            for gameSnap in snapshot.children {
                let id = (gameSnap as! FIRDataSnapshot).key
                print(id)
}
})

它仍会打印我在浏览器中删除的那些游戏。在我的应用程序中调用runningGameRef!.removeValues()确实会在浏览器和iPhone上将其删除(print(id)是固定的)。我在不同子项上的多个observeSingleEvent函数上遇到此错误,不仅是RunningGames的子项。什么会导致此烦人的错误?

RunningGames中的某些孩子也有孩子,但是他们会在应用程序中自动删除自己。但是,在调用observeSingleEvent时,这些值也仍然可见。


可能您的本地缓存仍在保存过时的信息。当您从多个来源处理数据时,通常会发生这种情况。

我会尝试使用observe而不是observeSingleEvent。我知道这有点奇怪(如果只想加载一次数据,这并不是您真正想要的),但这应该可以使您的信息保持最新。

也许这样做可以只获取一次信息。

1
2
3
4
5
6
7
8
var handle: UInt = 0
  handle = ref.observe(.value, with: { snapshot in
    for gameSnap in snapshot.children {
      let id = (gameSnap as! FIRDataSnapshot).key
      print(id)
    }
  ref.removeObserver(withHandle: handle)
})

代码源(弗兰克·范·普菲伦)