我今天要发布我的应用程序,但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
}
}
}
}
}
}
答案 0 :(得分:0)
不建议禁用缓存以防御文档中的旧数据。相反,您的代码应防御文档中的意外数据。在使用前验证所有内容。
即使您一次设法清除或禁用了缓存来解决此问题,下次您对Firestore中的文档结构进行更改时,问题也会再次发生。通常,如果您希望文档可能会随着时间而变化,则客户端代码应始终检查以查看是否存在期望的字段,并且字段数据的类型正确。这称为防御性编程-使用前检查所有内容。