gpt4 book ai didi

iOS Firestore IsPersistenceEnabled 不会禁用现有的缓存监听器结果

转载 作者:行者123 更新时间:2023-12-01 21:58:09 25 4
gpt4 key购买 nike

缓存通常会完成我们的第一个 FireStore 快照监听器结果,几乎总是带有过时的数据(很明显)。监听器通常会在丢失结果后立即再次触发。

使用 FireStore 设置将 isPersistenceEnabled 设置为 false 不会阻止缓存结果返回。我必须清除已经构建的缓存吗?

查看snap.metadata.isFromCache时,缓存显然还在运行。

在 VC 嵌入 present 时禁用持久性不执行任何操作(容器 View ):

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
})

我有重要的事情要做,当监听器第一次触发时。当我有互联网连接时,这通常会首先触发陈旧的缓存结果,我想将其排除在外。我尝试检查 isFromCache 并提前返回,但发现即使有网络连接,最新的结果也可能从缓存中返回。这会导致监听器不再触发。

如果缓存的结果永远不会返回,那将是一帆风顺的。我不确定在 iOS SDK 中禁用持久性有什么作用,但它在这里没有帮助。

最佳答案

您所描述的是通过告诉 SDK 交付 events for metadata changes 来解决的.请务必通读该文档。

当您注册元数据更改时,当元数据中的某些内容发生更改时将调用您的回调,包括数据源(即使文档数据根本没有更改)。您可以通过这种方式检查服务器中的数据是否绝对是最新的 - snapshot.metadata.isFromCache 应该返回 false。

要请求更改元数据,请调用 addSnapshotListener像这样:

query.addSnapshotListener(includeMetadataChanges: true) { documentSnapshot, error in
// ...
}

关于iOS Firestore IsPersistenceEnabled 不会禁用现有的缓存监听器结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60999671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com