2017-01-01 4 views
1

Ich muss meine Firebase-Daten nach Datum (Unix) ordnen. Ich dachte queryOrdered(byChild: "date") würde den Trick tun. Geschehen ein search und fand this was Sinn macht:Firebase-Daten mit Abfrage sortierenNach Datum sortiert

But when you request the .value of the snapshot, the keys+data are converted to a Dictionary. Since a dictionary does not have an extra place to put the information about the order, that information is lost when converting to a dictionary.

Unter Verwendung des gleichen json aber modifiziert mit Unix-Daten ...:

{ 
    "users" : { 
    "alovelace" : { 
     "name" : "Last Year", 
     "date" : 1480550400 
    }, 
    "eclarke" : { 
     "name" : "New Year Now", 
     "date" : 1483228800 
    }, 
    "ghopper" : { 
     "name" : "New Year", 
     "date" : 1483228800 
    } 
    } 
} 

... wie zu sortieren, wenn mein Code wie folgt lautet:

DataService.ds.REF_INCOMES.queryOrdered(byChild: "date").observe(.value, with: { (snapshot) in 

    if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] { 
     print(snapshot) 
     for snap in snapshot { 
      if let incomeDict = snap.value as? [String: AnyObject] { // What needs to change here? 
       let key = snap.key 
       let income = Income(incomeId: key, incomeData: incomeDict) 
       self.incomes.append(income) 
       self.incomes.reverse() 
      } 
     } 
    } 
    self.tableView.reloadData() 
}) 

Das Bild unten: „Letztes Jahr“ soll letztes Mal gewesen sein, aber es ist nicht:

enter image description here

Ich habe eine ruby mentality also bin ich mit swift verloren. Vielen Dank.

Antwort

0

denke ich, was Sie fehlt hier die sort Funktion, versuchen Sie den Code unten und lassen Sie mich wissen, was die Ergebnisse sind:

DataService.ds.REF_INCOMES.queryOrdered(byChild: "date").observe(.value, with: { (snapshot) in 

    guard let usersSnapshot = snapshot.value as? [String:NSObject] else{ 

     return 
    } 

    let users = usersSnapshot["users"] as! [String:AnyObject] 
    let sorted = users.sorted{($0.0.value["date"] as! Double) > ($0.1.value["date"] as! Double)} 


    print(sorted) // It should be: New Year Now, New Year, Last Year 
}) 
+0

on line 'lassen Benutzer', bekam ich 'fataler Fehler: unerwartet gefunden null, während eine optionale value' – Sylar

+0

Versuch' Druck Abwickeln (usersSnapshot) ' vor der Fehlerzeile und sehen, was enthält – Jad

+0

Es gibt die Daten zurück. – Sylar