Ios 从Firestore addSnapshotListener创建的更改出错

Ios 从Firestore addSnapshotListener创建的更改出错,ios,swift4,google-cloud-firestore,Ios,Swift4,Google Cloud Firestore,过去几周,我一直在使用iOS Swift 4中的firestore构建一个简单的演示应用程序,作为realm的替代品。它有一个简单的表视图,当用户执行CRUD操作时,它会在设备之间填充并保持同步 在我的应用程序中-我向查询添加了快照侦听器 self.changeListener = query.addSnapshotListener { [weak self](queryResultSnapshot, error) in //process document changes } 在回调

过去几周,我一直在使用iOS Swift 4中的firestore构建一个简单的演示应用程序,作为realm的替代品。它有一个简单的表视图,当用户执行CRUD操作时,它会在设备之间填充并保持同步

在我的应用程序中-我向查询添加了快照侦听器

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
在上面的print中,我也使用pending writes标志来打印变更源。正如我们所看到的,当我执行删除操作时,我会收到一个删除通知,随后会立即创建/删除同一文档引用

还有其他人看到这种行为吗?直到几天前我才看到这种行为——所以我很好奇是否有什么事情需要我去处理


提前感谢

使用db transaction进行删除,不会出现此问题。例如:

Firestore.firestore().runTransaction({(transaction, error) -> Any? in

    return transaction.deleteDocument(docReference)

}) { [weak self](object, err) in
    // do something when operation is done
}

使用db transaction进行删除,不会出现此问题。例如:

Firestore.firestore().runTransaction({(transaction, error) -> Any? in

    return transaction.deleteDocument(docReference)

}) { [weak self](object, err) in
    // do something when operation is done
}

非常感谢@artembolotov。的确如此it@artembototov-快速更新,使用事务删除了使用脱机模式的能力。所以我不得不把它拿走。我最初观察到的行为肯定是一个firestore bug,因为它在几周内自行解决了ago@firestore-拉姆,太好了!在我的项目中,这个问题也被自己解决了,但后来又发生了!非常感谢@artembolotov。的确如此it@artembototov-快速更新,使用事务删除了使用脱机模式的能力。所以我不得不把它拿走。我最初观察到的行为肯定是一个firestore bug,因为它在几周内自行解决了ago@firestore-拉姆,太好了!在我的项目中,这个问题也被自己解决了,但后来又发生了!