【问题标题】:How Can I Disable Firestore Offline Cache?如何禁用 Firestore 离线缓存?
【发布时间】:2020-04-02 20:21:28
【问题描述】:

我今天要发布我的应用,但 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
                        }
                    }
                }
             }

       }
}

【问题讨论】:

    标签: ios swift firebase google-cloud-firestore


    【解决方案1】:

    不建议禁用缓存以防御文档中的旧数据。相反,您的代码应该保护自己免受文档中意外数据的影响。在使用之前验证所有内容。

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

    【讨论】:

    • 感谢 Doug 提供的信息 :) 我知道并且我也想使用带缓存的离线模式,但是这样当我在添加新文档时出错时,我必须删除集合并创建新的集合,因为旧的如果我也更新它,它仍然会返回旧数据。
    • 是的,这就是您的代码必须具有防御性的原因。没有简单的方法解决这个问题。
    • 如果我防御文档中的数据,仍然不是解决这个问题的办法。因为它没有更新结果,所以我必须创建一个具有唯一名称的新结果。为什么它仍然返回旧数据我仍然不知道它。无论如何,再次感谢您的回复:) 我会再等一会儿才能找到解决方案。如果找不到,我将创建新集合:/
    猜你喜欢
    • 2018-03-28
    • 2018-07-26
    • 2020-08-03
    • 1970-01-01
    • 2018-04-21
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    相关资源
    最近更新 更多