Firebase:如何在iOS应用程序关闭并重新启动后保留用户提要

Firebase:如何在iOS应用程序关闭并重新启动后保留用户提要,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我的应用程序中有一个TableView,它在启动应用程序时从Firebase数据库加载用户提要。现在,如果用户关闭应用程序并重新打开,则TableView将完全为空,并调用retrieveFeed函数再次检索最近的十篇文章。我希望这些帖子从本地设备加载,而不是从数据库服务器调用 通过阅读Firebase文档,我了解到可以通过启用持久性并将keepSynced设置为true来添加此脱机功能,正如我在下面的代码中所做的那样。我是否需要使用核心数据,以便在应用程序被终止并重新启动后在feed-in存储

我的应用程序中有一个
TableView
,它在启动应用程序时从Firebase数据库加载用户提要。现在,如果用户关闭应用程序并重新打开,则
TableView
将完全为空,并调用
retrieveFeed
函数再次检索最近的十篇文章。我希望这些帖子从本地设备加载,而不是从数据库服务器调用

通过阅读Firebase文档,我了解到可以通过启用持久性并将
keepSynced
设置为
true
来添加此脱机功能,正如我在下面的代码中所做的那样。我是否需要使用核心数据,以便在应用程序被终止并重新启动后在feed-in存储中保留最近的十篇文章,或者Firebase是否应该能够做到这一点

在my
AppDelegate.swift
中:

FirebaseApp.configure()
Database.database().isPersistenceEnabled = true
在我的
DataService.swift
(其中包含对Firebase的所有调用)中:


我意识到了我的错误:在我的函数
retrieveFeed
中,我还调用了FirebaseStorage来检索图像(Firebase目前不支持图像的缓存)。设置了持久性和同步后,这些调用没有正确完成。一旦我使用这个pod()调整了这些调用,它就开始工作了

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)
    })
}