我的实时数据库如下所示:
您只能看到一个孩子。几分钟前我在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时,这些值仍然可见。
答案 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)
})