2016-09-13 6 views
0

呼ば `setValue`完了:FirebaseのiOS SDK inconsistantly使用する場合

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

をFirebaseのiOS SDKの一部として、永続性が有効になっている場合、終了ブロックは矛盾と呼ばれます。

ネットワーク接続がなく、ローカルに更新され、サーバーにデータを送信するときに完了を呼び出すだけで完了しないとわかっていますが、 firebaseコンソールと私の補完ブロックが呼び出されても、一貫していません。

persistanceEnabledをオフにすると、呼び出しは正常に機能します。

私の方法です。完了ブロック意志 - refは真実ではない

「私はネットワーク接続がない場合は補完が呼び出されるべきではないことを認識し、」

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

JSONなどのオブジェクト表現FIRDatabaseReferencejsonですはネットワークに接続されておらず、persistenceEnabledがオンの場合に呼び出されます。

ここでの理論的根拠は、Firebaseデータベースをアプリケーションの真のデータソースとし、接続しているかどうか心配する必要がある場合は、あなた自身が手動で接続または管理していれば、物事は乱雑になるでしょう。

データベースに接続されていないがpersistenceEnabledが有効になっている場合、Firebaseは、オンラインデータベース自体が更新されたかのように、「自分のデータをローカルキャッシュに更新して後で保存する」コールを扱いますFirebaseのリファレンスを正確なデータソースとして扱うことができます。

関連する問題