2017-12-15 29 views
2

私はFirebase Databaseを使用しているアプリケーションで作業していますが、オフライン時にユーザーが追加することも許可します。以下の場合(すべてオフライン;それはオンライン完璧に動作します)想像:ユーザーが(メインテーブルビューに示されている - 作品)クライアント追加Firebaseデータベースがオフラインで値を返しません。

  1. を新たに添加クライアントの詳細図で
  2. を、彼が追加されます彼との約束。これらの予定は、Client Detail ViewControllerのテーブルビューに一覧表示されます。
  3. アポイントを追加すると、コールバックがコールしないため、テーブルビューは更新されません。コードで

:ポストは、詳細ビュー・コントローラののviewDidLoad法について顧客

  • の値を有する辞書である

    1. navCont.child = userDB.child(entityNameClients).childByAutoId() navCont.child?.setValue(post)は、私は、次のコードを呼び出す:getUsersDBReference().child(entityNameAppointments).child(clientKey).observe(.value)。 >とテーブルビュー - コールバックは、2のコールバックは、(呼び出されない予定

      var appointment:DatabaseReference 
      

      appointment = getUsersDBReference().child(entityNameAppointments).child(clientKey).childByAutoId() appointment.setValue(appointmentDict)

    2. を追加する(その中に要素がないためか)

    3. と呼ばれていません

    ところで、私はアプリの代表applicationDidLoad -methodにDatabase.database().isPersistenceEnabled = trueを設定する)新しい予定を更新されません。 クライアントをオンラインに追加してオフラインにすると、それも機能します。 Firebaseサポートの

  • 答えて

    0

    回答:

    SDKは、 "部分" のデータと値イベントを発生しないようにしようとします。観察されている場所のサブノードのみを更新しているため、「完全な」データがないため、オブザーバは起動されません。 SDKがそのノードの「完全な」データを持っていた場合(ノード全体を上書きした、以前はオンラインだったため完全なデータを取得したなど)、イベントを更新するとイベントが発生します。

    回避策の1つは、Valueの代わりにChildAdded(およびChildChangedなど)イベントを使用することです。

    関連する問題