У меня есть TableView
в моем приложении, которое загружает канал пользователя из базы данных Firebase при запуске приложения. Прямо сейчас, если пользователь убивает приложение и открывает его снова, TableView
полностью пуст и вызывает функцию retrieveFeed
, чтобы снова получить десять последних сообщений. Я хотел бы, чтобы эти сообщения загружались с устройства локально, а не вызывались с сервера базы данных.
Насколько я понимаю, читая документы Firebase, эту автономную возможность можно добавить, включив постоянство и установив keepSynced
в true
, как я делаю в коде ниже. Нужно ли использовать базовые данные, чтобы сохранить последние десять сообщений в ленте в хранилище после того, как приложение было убито и перезапущено, или 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)
})
}