过去几周我一直在iOS Swift 4中使用firestore构建一个简单的演示应用程序作为领域的替代品。它有一个简单的表视图,可以在用户执行CRUD操作时填充并保持设备同步
在我的应用中 - 我在查询中添加了一个snapshotlistener
self.changeListener = query.addSnapshotListener { [weak self](queryResultSnapshot, error) in
//process document changes
}
在回调中 - 我已根据queryResultSnapshot.changes中的DocumentChangeType处理添加的,更新的,已删除的更改。
主要问题是我使用
删除文档reference.delete(completion:)
删除成功后 - 我在querySnapshotListener中看到以下事件。
//following is a debug message printed in delete function to correlate document ID
Will delete reference: i0W76CZP5X41vRp6BmzY
//following 3 are printed in the snapshot change listener
Deleted reference: i0W76CZP5X41vRp6BmzY, Source of change: Server
Created reference: i0W76CZP5X41vRp6BmzY, Source of change: Server
Deleted reference: i0W76CZP5X41vRp6BmzY, Source of change: Server
在上面的打印中 - 我正在使用挂起写入标志来打印更改源。我们可以看到 - 当我执行删除操作时 - 我收到删除通知,然后立即创建/删除相同的文档引用。
有没有其他人看到这种行为?直到几天后我才看到这种行为 - 所以我很好奇是否有需要处理的事情?
提前致谢
答案 0 :(得分:0)
使用db transaction进行删除,不会发生此问题。例如:
Firestore.firestore().runTransaction({(transaction, error) -> Any? in
return transaction.deleteDocument(docReference)
}) { [weak self](object, err) in
// do something when operation is done
}