Отличный вопрос.
В Parse есть концепция кэшированных запросов. https://docs.parseplatform.org/ios/guide/#caching-queries
Интересной особенностью кэшированных запросов является то, что вы можете указать - «если нет сети». Однако это работает, только если вы ранее кэшировали результаты запроса. Я также обнаружил, что задержка между потерей подключения к сети и кэшированным запросом, признающим, что его потерянная сеть делает всю возможность немного мусорной.
Как я решил эту проблему, используя комбинацию библиотеки AlamoFire изакрепление объектов. Причина, по которой я решил использовать библиотеку AlamoFire, заключается в том, что она очень хорошо поддерживается и почти сразу же обнаруживает пропадание сетевого подключения. У меня всего несколько сотен записей, так что я не беспокоюсь о закреплении объектов, и определенно производительность не влияет. Итак, как я работаю, это ....
Определите некоторые объекты класса в верхней части класса
// Network management
private var reachability: NetworkReachabilityManager!
private var hasInternet: Bool = false
Вызовите метод при пробуждении представления
// View lifecycle
override func awakeFromNib() {
super.awakeFromNib()
self.monitorReachability()
}
Обновление объекта при изменении доступности сети. Я знаю, что этот метод можно улучшить.
private func monitorReachability() {
NetworkReachabilityManager.default?.startListening { status in
if "\(status)" == "notReachable" {
self.hasInternet = false
} else {
self.hasInternet = true
}
print("hasInternet = \(self.hasInternet)")
}
}
Затем, когда я вызываю запрос, у меня появляется переключатель при настройке объекта запроса.
// Start setup of query
let query = PFQuery(className: "mySecretClass")
if self.hasInternet == false {
query.fromLocalDatastore()
}
// Complete rest of query configuration
Конечно, я прикрепляю всерезультаты, которые я когда-либо возвращал с сервера.