Firebaseのユースケースは、ほとんどの場合とは少し異なります。バックエンドにはFBを排他的に使用しません。我々は、関係とすべてのデータを扱う大きなMariaDBサーバを持っています。Firebaseデータベース - iOSでJSONを繰り返しダウンロードしないようにしてください
私たちFBの目標は、iOSデバイスのクライアントが特定のデータを利用できるようにすることです。データを一度ロードしてから、この特定のデータの変更をリッスンする必要があります。ここではそれがどのように動作するかの大まかな概要です:初期化されているメインのViewControllerが
- は、我々はFIRDataEventTypeChildAddedを聞きます。 (持続性が有効)
- Firebaseはすべての一致するレコードをロードします。その後、ループバックしてローカルのSQLite DBに格納します。
通常のユーザーフローでは、他のViewControllerを画面上に押します。問題は、一度メインのViewControllerがロードされると、FIRDataEventTypeChildAddedは各レコードに対して再度発生します。
質問:
- FIRDataEventTypeChildAdded火災が再び、それはその内部キャッシュからデータをロードするか、それFirebaseサーバーから再ダウンロードするすべてのものです(永続?)?私はネットワークリンクコンディショナーを使ってインターネット接続を完全に切断しましたが、そうするとFIRDataEventTypeChildAddedは発生しませんが、ネットが戻ったらすぐにすべてのレコードに対してFIRDataEventTypeChildAddedが発生します。
- ログイン時にすべてのレコードをロードし、そのレコードの変更のみをリッスンする場合は、どのようにすればよいでしょうか?私はすでにorderByとstartingAtを使用していますので、上記のいずれかが含まれている場合、別の "hasDownloaded = yes"フィルタを追加することはできません。
ありがとうございます。
テストしているコードを共有してください。それがなければ、具体的なことを言うのは難しいです。 [MCVEの作成](http://stackoverflow.com/help/mcve)も参照してください。 –
この場合、コードは重要ではありません。問題は、Firebaseが背後でどのように動作するかについての明確な定義がないことです。 簡潔にするために、私はメインのViewControllerにChildAddedとChildChangedリスナーを持っています: VCがロードされるたびにJSONがサーバからダウンロードされるかどうかを理解する上で私の質問を読んでください。それがローカルキャッシュからフェッチされてもChildAddedリスナを起動する場合 – Adam
viewControllerとFirebaseがどのようにコード内に実装されているかを見ることなく、ユースケースが何であるかは不明です。つまり、VCがロードされるたびに* VC内のコードに大きく依存する。 .childAddedイベントは、各子に対して1つ、追加された追加の子に対して1つずつ発生させるよう意図的に設計されています。再接続後に追加された新しい子の場合は起動しますが、実装にも依存します。 – Jay