2016-09-13 79 views
0

使用:火力地堡的iOS SDK`setValue`完成inconsistantly稱爲

func setValue(value: AnyObject?, withCompletionBlock block: (NSError?, FIRDatabaseReference) -> Void)

的火力地堡的iOS SDK的一部分,建成塊將得到不一致啓用持久性時調用。

我意識到,如果沒有網絡連接,則不應調用完成,並且它將在本地進行更新,並只在將數據發送到服務器時調用完成,但是我可以看到正在創建的記錄Firebase控制檯和我的完成塊被調用仍然不一致。

如果我關閉persistanceEnabled,調用將按預期運行。

這是我的方法。裁判是一個FIRDatabaseReferencejson爲對象表示爲JSON

func lightSave(completion: FBModelUpdateCompletion? = nil) { 
    print("Light Saving \(ref)") 
    ref.setValue(json, withCompletionBlock: { (error, result) in 
     print("finished saving") 
     if let error = error { 
      print(error.localizedDescription) 
     } 
     completion?(error: error, object: self) 
    }) 
} 

回答

0

「我意識到,完成不應該得到,如果沒有網絡連接稱爲」

這不是真的 - 完成塊將當沒有網絡連接時被調用,並且您打開了persistenceEnabled

這裏的基本原理是,您應該讓Firebase數據庫成爲您應用程序中數據的唯一真實來源,並且如果您必須開始擔心您是否連接並依賴數據庫更新連接或手動管理它,如果你不是,事情會變得混亂。

因此,如果您未連接到數據庫但啓用了persistenceEnabled,則Firebase會將「我正在將數據更新到本地緩存以便以後保存」調用,就像在線數據庫本身已更新一樣,因此您可以繼續將您的Firebase參考視爲精確的數據來源。