bugfix> ios > 投稿

私は TableView を持っています私のアプリでは、アプリの起動時にFirebase Databaseからユーザーのフィードを読み込みます。現在、ユーザーがアプリを強制終了してから再度開くと、 TableView 完全に空白であり、 retrieveFeed を呼び出します最新の10個の投稿を再度取得する関数。これらの投稿は、データベースサーバーから呼び出されるのではなく、デバイスからローカルに読み込まれるようにします。

Firebaseのドキュメントを読んで、このオフライン機能は永続性を有効にして keepSynced を設定することで追加できることを理解しています true へ以下のコードで行うように。アプリを強制終了して再起動した後、Firebaseでこれを実行できるようにした後、フィード内の最新の10件の投稿をストレージに保持するためにCore Dataを使用する必要がありますか?

私の AppDelegate.swift で :

FirebaseApp.configure()
Database.database().isPersistenceEnabled = true

私の DataService.swift で(Firebaseへのすべての呼び出しがあります):

func retrieveFeed(queryNumber: UInt,  lastSeenKey: String?, completion: @escaping ([ Int: DataService.FeedQuote ]) -> ()){
    var dbquery = DatabaseQuery()
    if (lastSeenKey == nil){
        dbquery = self.user_ref.child(self.currentUserUserId).child("feed").queryOrderedByKey().queryLimited(toFirst: queryNumber)
    }
    else {
        dbquery = self.user_ref.child(self.currentUserUserId).child("feed").queryOrderedByKey().queryStarting(atValue: lastSeenKey).queryLimited(toFirst: queryNumber)
    }
    dbquery.keepSynced(true)
    dbquery.observeSingleEvent(of: .value, with: { (snapshot) in
        var FeedQuotes = [DataService.FeedQuote]()
        // ...
        // Data processing here
        // ...
        completion(correctlyOrderedFeedQuotes)
    })
}

回答 1 件
  • 私は自分のエラーに気付きました:関数 retrieveFeed の中  また、FirebaseStorageを呼び出して画像を取得していました(Firebaseは現在キャッシュをサポートしていません)。これらの呼び出しは、永続性と同期のセットアップで適切に完了しませんでした。このポッド(https://github.com/antonyharfield/FirebaseStorageCache)を使用してこれらの呼び出しを調整すると、動作し始めました!

あなたの答え