2017-10-29 1 views
0

Ich habe in den letzten Wochen Firestore in iOS Swift 4 verwendet, um eine einfache Demo-App als Alternative zu Realm zu erstellen. Es hat eine einfache Tabellenansicht, die synchron auf verschiedenen Geräten wird bevölkert und gehalten als Benutzer CRUD-OperationenError error CREATED Änderung von Firestore addSnapshotListener

In meiner app tut - ich habe eine snapshotlistener auf eine Anfrage

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

In der Callback hinzugefügt - Ich habe behandelt die hinzugefügten, aktualisierten, gelöschten Änderungen basierend auf DocumentChangeType in queryResultSnapshot.changes.

Hauptproblem ist, wenn ich ein Dokument löschen mit

reference.delete(completion:) 

Nach dem Löschen erfolgreich ist - ich sehe die folgenden Ereignisse in meinem querySnapshotListener erhalten.

//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 

Im obigen Ausdruck - ich benutze die Pending Writes Flag, um die Quelle der Änderung auch zu drucken. Wie wir sehen können - wenn ich eine Löschung mache - erhalte ich eine Löschbenachrichtigung, unmittelbar gefolgt von einer zusätzlichen Erstellung/Löschung der gleichen Dokumentenreferenz.

Kann jemand anderes dieses Verhalten sehen? Ich habe dieses Verhalten bis vor ein paar Tagen nicht gesehen - also bin ich neugierig, ob es etwas gibt, mit dem ich umgehen muss?

Dank im Voraus

Antwort

0

Verwenden db Transaktion zum Löschen und dieses Problem nicht auftreten wird. Zum Beispiel:

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

    return transaction.deleteDocument(docReference) 

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

Vielen Dank @artembolotov. Das tat es –

+0

@ Firestore-Ram, danke für Ihr Feedback :-) – artembolotov

+0

@artembototov - schnelles Update, die Verwendung der Transaktion entfernt die Fähigkeit, den Offline-Modus zu verwenden. Also musste ich es entfernen. Das Verhalten, das ich ursprünglich beobachtet habe, war definitiv ein Feuerwanzen, weil es sich vor ein paar Wochen gelöst hat. –