ios - Firebase 'observe' 使用不同的数据多次触发

标签 ios firebase-realtime-database

我为某个目录设置了一个观察者,在这种情况下表示为 ref(简化的代码示例):

ref.observe(.value, with: { snap in
     if snap.exists(){
         let some = MyStructure(snap: snap)
         print(some.date)
     }
})

问题是,即使该位置 (ref) 中的数据永远不会改变,处理程序也会被调用多次(通常是 2 次),最让我烦恼的是,不同的数据仅一个字段(date 字段)。想过为什么会发生这种情况吗?


附言。我通常会删除所有观察者以获取其回调处理程序中的引用,但是,在这种情况下,我不能这样做,因为第一次调用返回的数据带有错误的 date 字段,但下一次调用往往会做对的人。

附言。我不能使用 '.observeSingleEvent' 方法,因为它使用缓存数据(我相信是由 Firebase 存储的),在这里只检索相关数据是必不可少的。

最佳答案

原因

经过一些挖掘,我发现双重触发是 Firebase SDK 的预期行为。第一个 - 用于引用的缓存快照,第二个 - 从实时数据库中检索。

如何处理

  1. isPersistenceEnabled 设置为 false。这将确保所有 .observe 调用不使用设备本地缓存的数据

  2. 用第二次调用更新数据(如果有的话)

关于ios - Firebase 'observe' 使用不同的数据多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45969419/

相关文章:

ios - 在 iOS 中存储应用内图片的最佳选择

ios - 谷歌自定义搜索 : 403 error in iOS

ios - SKProductsRequest 在 iOS 11 模拟器中不起作用

java - Firebase根据数据库中存储的不同值打开不同的 Activity

javascript - firebase 使用 orderByChild() 和 equalTo() 检索数据

iphone - 有没有办法知道 iOS 设备何时锁定/解锁?

ios - Storyboard中的 OBShapedButton 类

java - DatabaseException - 无法将 java.lang.String 类型的对象转换为 com.appmaster.akash.messageplus.Results 类型

node.js - Node js 计数器值不会增加

android - 如何从 firebase 检索所有数据