2016-12-21 5 views
0

Haftungsausschluss: Ich bin sehr neu in Codierung und Firebase.Swift Firebase Bestellanfrage

Mein JSON Baum sieht wie folgt aus:

 “MAIN LEAGUE“ : { 
       “Team Alpha“ : { 
        "Team Score" : “50”, 
        "Total Time " : "02:22:05", 
        "Team Name" : “Team Alpha“, 

         }, 
       “Team Bravo“ : { 
        "Team Score" : “200”, 
        "Total Time" : "02:09:58", 
        "Team Name" : “Team Bravo“ 
        }, 
       “Team Charlie“ : { 
        “Team Score“ : “150”, 
        "Total Time" : "02:16:50", 
        "Team Name" : “Team Charlie“ 
         } 
     } 

Ich versuche, die Datenbank abzufragen und einen neuen Tableview präsentieren, wobei die Teams durch höchste „Team Score“ eingestuft werden.

So versuchen, in dieser Reihenfolge zu zeigen,:

" Team Bravo" : "200" 
" Team Charlie" : "150" 
" Team Alpha" : "50" 

ich ein bisschen verloren bin. Ich habe versucht, ohne Erfolg (die unten nichts mehr im Tableview zurückgibt):

struct content { 
     var sTitle : String! 
     var sValue : Any! 

     init(sTitle: String, sValue: Any) { 
      self.sTitle = sTitle 
      self.sValue = sValue 
     } 
    } 

    var dbHandleQuery: FIRDatabaseHandle? 

    var dbrefString = (myDatabasePath)// this is the database path to the correct child 
    ("MAIN LEAGUE") 

      dbHandleQuery=FIRDatabase.database().reference().child(dbrefString).queryOrdered(byChild: "Team Score").observe(.value, with: {(snapshot) in 

    var newContent : [content] = [] 
      for snap in snapshot.children.allObjects as! [FIRDataSnapshot] { 

       let title = snap.key as String 
       let message = snap.value as? String 
       print(snap.key) 
       print(snap.value as Any) 
       newContent.append(content(sTitle: title, sValue: message as Any)) 
       self.myTableView.reloadData() 
      } 
      self.cellContent = newContent 
      self.myTableView.reloadData() 
     }) 

Wie kann ich das Ranking erreichen? Oder wäre es besser zu versuchen, alles in lokalen Arrays zu laden und dann versuchen, sie von dort aus einzuordnen? Jede Hilfe, sehr geschätzt!

UPDATE: Also oben sortiert sie richtig, aber meine Tabelle ruft nur den TEAMNAME ab, und ich kann den "Total Score" nicht extrahieren, um ihn in meine Tabellenansichtszelle 2nd Label (es hat 2 Etiketten, 1 für Team Name) , 1 für die Gesamtpunktzahl).

So, jetzt sieht es wie folgt aus:

" Team Bravo" 
" Team Charlie" 
" Team Alpha" 

Wie kann ich jeden entsprechenden Gesamt Punkte neben jedem anhängen? Vielen Dank

Antwort

4

Ok nicht sicher, das ist die bestmögliche Antwort, aber ich habe es geschafft, es zu arbeiten und das gewünschte Ergebnis zu bekommen.

Posting es jedem zu helfen, in der gleichen Ausgabe führen könnten:

dbHandleQuery = FIRDatabase.database().reference().child(dbrefString).queryOrdered(byChild: "Team Score").observe(.value, with: {(snapshot) in 
     var counter = 0 
     var newContent : [content] = [] 
     for snap in snapshot.children.allObjects as! [FIRDataSnapshot] { 

      counter += 1 
      let title = snap.key as String 
      if let rankedBy = snap.value as? [String : Any] { 

      newContent.append(content(sTitle: "\(counter).\(title)", sValue: rankedBy["Team Score"] as Any)) 
       self.myTableView.reloadData() 
      } 
     } 
     self.cellContent = newContent 
     self.myTableView.reloadData() 
    }) 

Das gibt mir

"1.Team Bravo" - "200" 
"2.Team Charlie" - "150" 
"3.Team Alpha" - "50" 
+1

Stellen Sie sicher, dass Index der Datenbank auf „Team Score“, wenn Sie verwenden wollen dieser Code. In der Firebase-Dokumentation finden Sie ein Beispiel, das Ihrem Code hier sehr ähnlich ist: https://firebase.google.com/docs/database/security/indexing-data – DoesData