我的应用中有一个TableView
,用于在应用启动时从 Firebase 数据库加载用户的 Feed。现在,如果用户终止应用程序并重新打开它,则TableView
完全空白,它会调用retrieveFeed
函数再次检索最近的十个帖子。我希望这些帖子从本地设备加载,而不是从数据库服务器调用。
通过阅读Firebase文档,我的理解是,可以通过启用持久性并将keepSynced
设置为true
来添加此离线功能,就像我在下面的代码中所做的那样。 我是否需要使用核心数据才能在应用停用并重新启动后将 Feed 中最近的 10 篇帖子保留在存储中,或者 Firebase 是否应该能够执行此操作?
在我的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)
})
}
我意识到我的错误:在我的函数retrieveFeed
中,我还调用FirebaseStorage来检索图像(Firebase目前不支持缓存(。 这些调用未在设置持久性和同步时正确完成。 一旦我使用此 pod (https://github.com/antonyharfield/FirebaseStorageCache( 调整了这些调用,它就开始工作了!