ios - ObserveSingleEvent 效果不佳

标签 ios swift firebase firebase-realtime-database

我的实时数据库是这样的:

enter image description here

如您所见,它只包含 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)
})

Source of the code (Frank van Puffelen)

关于ios - ObserveSingleEvent 效果不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42704693/

相关文章:

ios - 在 IOS 应用程序的后台接收来自 firebase 的通知?

ios - Firebase 观察方法 - 零星停机?

Swift:包含 NSTextViews 的 NSScrollView 无法正确滚动

android - 添加一些依赖项会导致构建项目出错

iOS - 调整 UIWebView 的大小以适合内容?

iphone - 如何使用 Swift 编程在 iOS 8 中退出应用程序并返回主屏幕

ios - 桥接 header 将框架导入 View Controller

firebase - 在最新(2020年8月)firebase更新之后,使用电子邮件链接的完整登录已不再起作用

node.js - Firestore 向数组字段添加值

ios - iOS 上的 RSA 加密 (RSA/ECB/PKCS1Padding)