如何禁用Firestore离线缓存?

时间:2020-04-02 20:21:28

标签: ios swift firebase google-cloud-firestore

我今天要发布我的应用程序,但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 :(得分:0)

不建议禁用缓存以防御文档中的旧数据。相反,您的代码应防御文档中的意外数据。在使用前验证所有内容。

即使您一次设法清除或禁用了缓存来解决此问题,下次您对Firestore中的文档结构进行更改时,问题也会再次发生。通常,如果您希望文档可能会随着时间而变化,则客户端代码应始终检查以查看是否存在期望的字段,并且字段数据的类型正确。这称为防御性编程-使用前检查所有内容。

相关问题