Swift 可以使用observeSingleEvent+;是否启用持久性?

Swift 可以使用observeSingleEvent+;是否启用持久性?,swift,firebase,Swift,Firebase,我正试图从firebase获取一些数据。当我启用了持久性时,你知道如何获取最新的数据(不是来自缓存)吗?我试着保持同步;我仍然得到陈旧的数据。这是正确的用法吗 userRef = FIRDatabase.database().reference().child("<path>") userRef.keepSynced(true) userRef.observeSingleEvent(of: .value, with: { snapshot in ...stale data he

我正试图从firebase获取一些数据。当我启用了持久性时,你知道如何获取最新的数据(不是来自缓存)吗?我试着保持同步;我仍然得到陈旧的数据。这是正确的用法吗

userRef = FIRDatabase.database().reference().child("<path>")
userRef.keepSynced(true)
userRef.observeSingleEvent(of: .value, with: { snapshot in
   ...stale data here...
})
userRef=FIRDatabase.database().reference().child(“”)
userRef.keepSynced(true)
userRef.observeSingleEvent(的值为:,其中包含:{snapshot in
…此处的过时数据。。。
})
或者唯一的选择是使用observe而不是ObserveSingEvent?我不喜欢使用observe首先获取缓存数据,然后使用来自服务器的数据再次触发事件。因此,使用observe,当我导航到此屏幕时,首先看到一个空白表,然后看到包含过时数据的表,然后看到包含最新数据的表

谢谢

编辑:

-
这篇帖子说keeySynced应该可以工作。但这对我不起作用。我想知道我是否做错了什么。

我找到了一些解释,我想这可能对你的情况有所帮助:

如果Firebase 无法按时建立连接。尤其如此 在appLaunch期间或在appDelegate中,如果 Firebase连接,并给出缓存结果会的 如果启用了持久性并且 observeSingleEvent可能会首先提供缓存数据。在某些情况下 与此类似,连续ObserveEventType是首选的,并且应该 在绝对需要新数据时使用


我认为你没有选择使用连续的倾听者。但是为了避免性能问题,为什么不再删除侦听器时不删除侦听器。

下面是一个示例,介绍如何在启用持久性时始终从firebase获取最新数据。如果不想一直保持侦听器,请使用observeevent、ref上的keepSynced和terminatelistener。经过几次试验,我想出了这个,它是工作

func readFromFB() {
    let refHandle: DatabaseHandle?
    let ref: DatabaseReference? = firebase.child(nodeName)
    ref?.keepSynced(true)

    refHandle = ref!.observe(.value, with:
     { snapshot in
        if snapshot.exists() {
            for item in ((snapshot.value as! NSDictionary).allValues as Array) {
                //do whatever tasks
            }
        }
    })
    if let rf = ref {
        rf.removeObserver(withHandle: refHandle!)
    }
}

可能重复的
ObserveSingleEvent
将获取启用持久性的本地缓存数据。因此,如果需要更新的值,请使用
observeEvent
并跳过第一个值。有关更多详细信息:[不使用exit()以及相同的旧数据获取方法]我在过去的3个小时里从头开始编写所有方法,只是为了发现observeSingleEvent导致了这种不一致性!