2017-11-16 3 views
0

firebaseからデータを取得しようとしています。永続性を有効にしている場合、どのように最新のデータを取得できますか(キャッシュからではありません)。私はkeepSyncedを試した。私はまだ失効したデータを取得します。これは正しい使用法ですか?observeSingleEvent + persistenceを有効にして最新のデータを取得できますか?

userRef = FIRDatabase.database().reference().child("<path>") 
userRef.keepSynced(true) 
userRef.observeSingleEvent(of: .value, with: { snapshot in 
    ...stale data here... 
}) 

または、observeSingleEventの代わりにobserveを使用する方法がありますか?私は、キャッシュデータを最初に取得し、次にイベントがサーバーからのデータで2回目にトリガーされることを観察するというのは嫌です。したがって、この画面に移動すると、空のテーブルが表示された後、古いデータのあるテーブルが表示され、最新のデータが表示されます。

ありがとうございました。

EDIT:

https://stackoverflow.com/a/34487195/1373592 - この投稿はkeeySyncedが動作するはずと言います。しかし、それは私のために働いていない。私は何か間違っているかどうかを知りたい。

+2

[Firebaseオフライン機能とaddListenerForSingleValueEvent]の可能な重複(https://stackoverflow.com/questions/34486417/firebase-offline-capabilities-and-addlistenerforsinglevalueevent) –

+1

'ObserveSingleEvent'が有効に永続性を持つローカルにキャッシュされたデータをフェッチします。したがって、更新された値に 'observeEvent'を使い、最初の値をスキップする必要がある場合。 詳細:[https://stackoverflow.com/questions/34486417/firebase-offline-capabilities-and-addlistenerforsinglevalueevent/34487195#34487195] [1] –

答えて

0

私はいくつかの説明を取得し、私はそれはあなたのケースであなたを助けるかもしれないと思う:

Firebase 接続が時間通りに確立できない場合keepSycnedとObserveSingleEventTypeが動作しません。これは、特に、 のappLaunchまたはappDelegateで、 Firebase接続に遅延があり、代わりにキャッシュされた結果が表示されます。 持続性が有効な場合は も時には動作しません。 observeSingleEventは、キャッシュされたデータを最初に提供する場合があります。 のような状況では、ObserveEventTypeが連続していることが推奨され、新鮮なデータが絶対に必要な場合は が使用されます。

私はあなたが継続的なリスナーを使用する選択肢がないと思います。しかし、パフォーマンス上の問題を避けるために、あなたがリ

関連する問題