我的应用程序中有一个TableView
,该应用程序在启动时会从Firebase数据库加载用户的供稿。现在,如果用户终止了该应用程序并重新打开它,则TableView
完全空白,并调用retrieveFeed
函数以再次检索十个最新帖子。我希望这些帖子可以从设备本地加载,而不是从数据库服务器调用。
通过阅读Firebase文档,我的理解是,可以通过启用持久性并将keepSynced
设置为true
来添加此脱机功能,如下面的代码所示。在应用程序被终止并重启后,我是否需要使用Core Data来将Feed中的最新十个帖子保存在存储中?或者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)
})
}
答案 0 :(得分:0)
我意识到自己的错误:在函数retrieveFeed
中,我还调用了FirebaseStorage来检索图像(Firebase当前不支持其缓存)。通过持久性和同步设置,这些调用无法正常完成。一旦我使用此窗格(https://github.com/antonyharfield/FirebaseStorageCache)调整了这些通话,它便开始工作!