Кэш обычно выполняет результаты нашего первого прослушивателя снимков FireStore, почти всегда с устаревшими данными (очевидно). Слушатель часто запускает снова с отсутствующими результатами сразу после.
Использование настроек FireStore для установки isPersistenceEnabled в false не останавливает возвращение результатов кэша. Нужно ли очищать уже созданный кеш?
При проверке snap.metadata.isFromCache кеш явно работает.
Отключение сохранения, пока работает V C встроенный в настоящее ничего не делает (просмотр контейнера):
vc?.db = Firestore.firestore()
let settings = FirestoreSettings()
settings.isPersistenceEnabled = false
vc?.db?.settings = settings
Какой-то код:
var isFirstQuery = true
queuesInLocationRef?.remove()
queuesInLocationRef = db?.collection("location").whereField("city", isEqualTo: city).whereField("region", isEqualTo: region).addSnapshotListener({ (snapshot, error) in
guard let snap = snapshot else {
print("watch location err: ", error!)
return
}
self.processDocumentChanges(documentChanges: snap.documentChanges, isFirstQuery: isFirstQuery)
isFirstQuery = false
})
У меня есть важные вещи, которые нужно сделать при первом срабатывании слушателя. Когда у меня есть соединение inte rnet, это часто сначала срабатывает со устаревшими кэшированными результатами, которые я хочу исключить. Я попытался проверить isFromCache и досрочно вернуться, но обнаружил, что даже при сетевом подключении обновленные результаты могут возвращаться как из кэша. Это приводит к тому, что слушатель не запускает снова.
Если кэшированные результаты никогда не возвращаются, это будет плавный переход. Я не уверен, что отключение персистентности делает в iOS SDK, но здесь это не помогает.