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