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是否应该能够做到这一点
在myAppDelegate.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)
})
}