Как отключить автономный кэш Firestore? - PullRequest
0 голосов
/ 02 апреля 2020

Я собираюсь выпустить свое приложение сегодня, но у меня возникла проблема с Firestore.

Когда я допустил ошибку в документах, например, если я неверно написал имя ключа или пропустил ключ и значение в документ, мое приложение падает из-за того, что оно не соответствует модели.

Я обновляю и исправляю его немедленно, но это все еще происходит. Когда я печатаю результаты на консоли, старый результат по-прежнему поступает из firebase, он не обновлялся.

Я пытался отключить автономный кэш, но он все тот же.

let settings = FirestoreSettings()
settings.isPersistenceEnabled = false
dbCollectionPosts.settings = settings 

И вот моя функция readData:

func readData() {
        dbCollectionPosts.collection("konular").addSnapshotListener { (documentSnapshot, err) in
            if err != nil {
                print((err?.localizedDescription)!)
                return
            }else {
                print("read success")
            }

            documentSnapshot!.documentChanges.forEach { diff in
                // Real time create from server

                if (diff.type == .added) {
                    let model = try! FirestoreDecoder().decode(Post.self, from: diff.document.data())
                    self.data.append(model)
                }

                if (diff.type == .removed) {
                    let docId = diff.document.documentID
                    if let indexOfToRemove = self.data.firstIndex(where: { $0.id == docId} ) {
                        self.data.remove(at: indexOfToRemove)
                        print("removed: \(docId)")
                    }
                }

                // Real time modify from server
                if (diff.type == .modified) {
                    self.data = self.data.map { (eachData) -> Post in
                        let data = eachData
                        if data.id == diff.document.documentID {
                            return try! FirestoreDecoder().decode(Post.self, from: diff.document.data())
                        }else {
                            return eachData
                        }
                    }
                }
             }

       }
}

1 Ответ

0 голосов
/ 02 апреля 2020

Отключение кэша для защиты от старых данных в документе не рекомендуется. Вместо этого ваш код должен защищаться от непредвиденных данных в документах. Проверьте все, прежде чем использовать его.

Даже если вам удастся очистить или отключить кэш один раз, чтобы исправить это, проблема просто повторится, когда вы в следующий раз внесете изменения в структуру документов в Firestore. В общем, если вы ожидаете, что документы могут со временем меняться, клиентский код всегда должен проверять наличие ожидаемых полей и правильность их типа. Это называется защитным программированием - проверьте все перед использованием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...