ObserveSingleEvent不能正常工作

时间:2017-03-09 20:19:21

标签: ios swift firebase firebase-realtime-database

我的实时数据库如下所示:

enter image description here

您只能看到一个孩子。几分钟前我在RunningGames中又有4个孩子。我在浏览器中删除了它们。现在叫这个:

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上删除它(打印(id)是固定的)。我对不同的子节点上的多个observeSingleEvent函数有这个错误,而不仅仅是RunningGames的子节点。什么会导致这个恼人的错误?

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

1 个答案:

答案 0 :(得分:1)

可能是您的本地缓存仍然保留着过时的信息。当您从多个来源操作数据时,通常会发生这种情况。

我会尝试使用observe代替observeSingleEvent。我知道这有点奇怪(如果你只想加载一次数据,那就不是你想要的了)但是这应该让你的信息保持最新。

通过这样做,你可以只获取一次信息。

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)
})

Source of the code (Frank van Puffelen)