Ios Firebase按值观察从缓存数据中获取旧值

Ios Firebase按值观察从缓存数据中获取旧值,ios,swift,firebase,swift3,firebase-realtime-database,Ios,Swift,Firebase,Swift3,Firebase Realtime Database,启用firebase持久性后,我一直面临着一些问题,我有机会阅读了发布的其他问题,并回顾了这些问题的答案,但仍然没有得到预期的效果 我已启用firebase持久性,并使用“按值观察”获取特定节点的最新更新。它不仅不断获取旧值,而且一旦我离开某个特定的视图控制器并返回到该视图控制器,该值将更改为最近的值 有没有合适的方法在第一次调用时请求最近的值 我尝试过的代码: // MARK: Bill authenticate function func authenticateBill(complet

启用firebase持久性后,我一直面临着一些问题,我有机会阅读了发布的其他问题,并回顾了这些问题的答案,但仍然没有得到预期的效果

我已启用firebase持久性,并使用“按值观察”获取特定节点的最新更新。它不仅不断获取旧值,而且一旦我离开某个特定的视图控制器并返回到该视图控制器,该值将更改为最近的值

有没有合适的方法在第一次调用时请求最近的值

我尝试过的代码:

 // MARK: Bill authenticate function

func authenticateBill(completion: @escaping (_ bill: Double?, _ billStatus: BillError?) -> Void) {

    // Observe incase bill details exist for current case
    let billRef = self.ref.child("bills").child((caseRef?.getCaseId())!)

    billRef.observe(FIRDataEventType.value, with: { (billSnapshot) in

        if !billSnapshot.exists() {
            completion(nil, BillError.unavailable)
            return
        }

        if let billDictionary = billSnapshot.value as? [String: AnyObject] {
            let cost =  billDictionary["cost"] as! Double

            print("Cost: ", cost)

            completion(cost, nil)
        }

    })

}

否,在启用持久性的情况下,第一次回调将包含来自缓存(如果有)的立即可用值,然后是来自服务器(如果有)的更新。您不能向SDK指示您想要缓存或新数据

如果希望在启用持久性的同时始终保持特定位置的最新状态,可以使用KeepSync向SDK指示它应该始终侦听和缓存该位置的数据。这需要不确定的带宽成本,具体取决于数据更改的频率


您可以使用REST API请求新数据,而无需通过任何缓存机制。

否,启用持久性后,您的第一次回调将包含缓存中立即可用的值(如果有),然后是服务器的更新(如果有)。您不能向SDK指示您想要缓存或新数据

如果希望在启用持久性的同时始终保持特定位置的最新状态,可以使用KeepSync向SDK指示它应该始终侦听和缓存该位置的数据。这需要不确定的带宽成本,具体取决于数据更改的频率

您可以使用REST API来请求新数据,而无需通过任何缓存机制。

我确实尝试添加具有true value的keepSync,但仍遇到相同的问题,最初加载旧值,后来加载新值@DougsStevenson我确实尝试添加具有true value的keepSync,但仍遇到相同的问题,首先加载旧值,然后加载新值@DougStevenson