我为某个目录设置了一个观察者,在这种情况下表示为 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 的预期行为。第一个 - 用于引用的缓存快照,第二个 - 从实时数据库中检索。
如何处理
将
isPersistenceEnabled
设置为false
。这将确保所有.observe
调用不使用设备本地缓存的数据用第二次调用更新数据(如果有的话)
关于ios - Firebase 'observe' 使用不同的数据多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45969419/