2017-10-29 15 views
0

私はファイアウォールを最後の数週間iOS Swift 4で使用して、レルムの代替として簡単なデモアプリケーションを作成しました。私のアプリでCRUD操作Firestore addSnapshotListenerから間違ったCREATED変更を受け取りました。

を行うことが取り込まれますシンプルなテーブルビューを持ち、ユーザーなどのデバイス間で同期を保つ - 私が扱っている - 私は、コールバックで

self.changeListener = query.addSnapshotListener { [weak self](queryResultSnapshot, error) in 
    //process document changes 
} 

クエリにsnapshotlistenerを追加しました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

使用DBトランザクションを。例:

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

    return transaction.deleteDocument(docReference) 

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

ありがとうございます@artembolotov。それは –

+0

@ firestore-ram、あなたのフィードバックのためにありがとう:-) – artembolotov

+0

@artembototov - クイックアップデート、トランザクションの使用は、オフラインモードを使用する機能を削除しました。だから私はそれを削除しなければならなかった。私が最初に観察した振る舞いは、数週間前にそれ自体解決したので、間違いなくファイヤーストアバグでした –

関連する問題