2017-08-02 1 views
0

Mit Firebase und Swift SDKWie kann man wissen, welcher Index ein Kind auf eine geordnete FirebaseQuery

hinzugefügt wurde ich mit Firebase gerade erst begonnen und wollte eine Liste der Gespräche von last_update geordnet anzuzeigen. Die folgende Abfrage funktioniert gut:

let query = Database.database().reference().child("chat").child("channels").queryOrdered(byChild: "last_update") 

query.observe(DataEventType.childAdded) { (snapshot: DataSnapshot) in 
    if let value = snapshot.value as? [String: Any?] { 
     log.debug("added channel: \(snapshot.key) : \(value)") 
     //add object to array, insertRow in tableview 
    } 
} 

Das erste Mal, meine Ansicht geladen wird, jedes Element in der richtigen Reihenfolge durch die Abfrage angegeben ankommt, so ist das Display in Ordnung. Aber wenn ich einen neuen Kanal erstelle, erscheint er am Ende der Tabellenansicht, weil ich ihn einfach am Ende des Arrays anfüge und einfach insertRow in meiner Tabellenansicht anrufe. Meine Frage ist: Gibt es irgendeinen Mechanismus, der uns die neu eingefügte Position des DataSnapshot gibt?

Gleiche Frage für DataEventType.childMoved: wir erfahren, dass ein Snapshot verschoben wurde, aber wie man weiß, wohin es verschoben wurde ??

+0

Ich denke, Sie können es nicht wissen, da Sie keine Informationen über das Hinzufügen/Zurückgehen mit dem Snapshot erhalten. Was Sie tun können, ist jedes Mal. ChildAdded .childMoved wird aufgerufen, sortieren Sie die Ergebnisse nach Ihrer Eigenschaft und laden Sie Tabellenansicht neu. – ZassX

+0

das ist eine Lösung, aber es scheint zu viel: Bestellung, wie bereits von der Abfrage durchgeführt, ich sollte es nicht noch einmal tun müssen. Und es verhindert auch, dass ich ein feinkörniges Update in der Tabellenansicht mache (mit Verschieben/Einfügen von Animationen) – PhilippeAuriach

Antwort

0

ich endlich mit FirebaseUI am Ende, vor allem das Submodul FirebaseDatabaseUI (siehe GitHub Repo here) Sie einen FUITableViewDataSource bieten, erstellen Sie einfach eine Anfrage und übergeben es an ihm, es alles wie Sortieren usw. behandeln werde ich auch verwendet FUIArray, was einfach ein Array ist, das von einer Abfrage unterstützt wird, mit einem Delegaten für hinzugefügte/gelöschte/verschobene/aktualisierte Ereignisse (und richtige Indizes).

Verwandte Themen