2016-08-19 1 views
2

War ich hoffe, jemand könnte mir helfen, Firebase Snapshot und Sortierung zu verstehen. Warum, wenn Sie OrderedByChild auf einem FirebaseDBRef abfragen, wird der snapshot.value wie in der Firebase-Datenbank (mit dem Browser) angezeigt, aber wenn Sie for snap in snapshot.children{} tun, werden die Werte sortiert angezeigt. Ich möchte nur erklären, warum das passiert.Firebase Sortierung Klarstellung auf snapshot.value

Lassen Sie mich mit einem Beispiel erklären.

let dinoRef = rootRef.child("dino") 
let query = dinoRef.queryOrderedByChild("dimensions/height") 
query.observeSingleEventOfType(.Value, withBlock: { snapshot in 
     // This prints to the console unsorted 
     print(snapshot.value) 

     // This prints to console sorted 
     for snap in snapshot.children { 
      print(snap) 
     } 
    }) 

Vielen Dank.

Antwort

3

Ein FIRDataSnapshot enthält Informationen über die Schlüssel der Rückgabedaten, die Werte, die diesen Schlüsseln zugeordnet sind, und die Reihenfolge der Schlüssel. Wenn Sie den Snapshot snapshot.children aufrufen, gibt der Enumerator die untergeordneten Elemente in der von Ihnen angeforderten Reihenfolge zurück. Wenn Sie snapshot.value auf einem Snapshot aufrufen, muss es alle Informationen in NSDictionary konvertieren. Ein Wörterbuch hat keine inhärente Information über die Reihenfolge der Daten, so dass die Reihenfolge der Ergebnisse zu diesem Zeitpunkt verloren geht.

0

Sie müssen versuchen, nach Kind mit aufsteigender und absteigender Option zu versuchen. Das wird deine Zweifel klären.

+0

Hallo, es gibt keine aufsteigende oder absteigende Option. Laut Firebase-Dokumentation ist die Sortierung bereits aufsteigend und nur aufsteigend. ---- https://firebase.google.com/docs/database/ios/retrieve-data#data_order. Selbst wenn es eine Asc- oder Desc-Option gab, klärt mein Kommentar meine Frage nicht. Wenn ich das Snapshot.value drucke, ist das Ergebnis unsortiert, wenn ich jedes Snapshot.children drucke, wird das Ergebnis sortiert. – sweepez

Verwandte Themen