作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的实时数据库是这样的:
如您所见,它只包含 1 个 child 。几分钟前,我在 RunningGames 中还有 4 个 child 。我在浏览器中删除了它们。现在调用这个时:
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) 是固定的)。我在不同 child 的多个 observeSingleEvent 函数上有这个错误,不仅仅是 RunningGames 的 child 。什么会导致这个烦人的错误?
RunningGames 中的一些 child 也有 child ,但他们会在应用程序中自动删除自己。但是,这些值在调用 observeSingleEvent 时仍然可见。
最佳答案
可能是您的本地缓存仍然保存着过时的信息。当您处理来自多个来源的数据时,通常会发生这种情况。
我会尝试使用 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)
})
关于ios - ObserveSingleEvent 效果不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42704693/
我是一名优秀的程序员,十分优秀!