2016-06-24 1 views
0

Ich kann meine Objekte aus der Datenbank nicht darstellen. Ich erklärte Array meine Einzelteile für die Aufnahme zu präsentieren:Elemente aus der Firebase-Datenbank in TableViewController können nicht angezeigt werden

var tournaments = [TournamentItem]() 

Funktion My Struktur TournamentItem init:

init(snapshot: FIRDataSnapshot!) { 

    key = snapshot.key 
    ref = snapshot.ref 
    type = snapshot.childSnapshotForPath("type").value as! String 
    name = snapshot.childSnapshotForPath("name").value as! String 
    numberOfParticipants = snapshot.childSnapshotForPath("numberOfParticipants").value as! Int 
    tournamentMode = snapshot.childSnapshotForPath("mode").value as! Bool 
    completed = snapshot.childSnapshotForPath("completed").value as! Bool 
} 

Funktion, um Daten zu erhalten wie folgt aussieht:

func getTournamentListSnapshot() { 

    ref.observeEventType(.Value, withBlock: { snapshot in 

     //print("\(snapshot.key) -> \(snapshot.value)") 


     for item in snapshot.children { 

      let tournamentItem = TournamentItem(snapshot: item as! FIRDataSnapshot) 
      self.tournaments.append(tournamentItem) 

     } 
     if self.tournaments.isEmpty { //not a subject of discussion 
      self.showAlertOfEmptyTournamentsArray() 
     } 

    }) 
} 

Und ich nenne das Innere meine ViewDidLoad-Methode. Das Problem ist, dass nach dem Aufruf dieser Methoden mein Array leer ist, aber Firebase-Datenbank nicht ist. Ich habe versucht, das ganze Ding zu debuggen, aber ich kann keine Lösung für dieses Problem finden.

Meine Tableviewcontroller Delegatmethoden sieht wie folgt aus:

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 

    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return self.tournaments.count 
} 
+1

Haben Sie rufen vergessen zu 'tableView.reloadData()' 'nach, wenn Selbst .tournaments.isEmpty {// kein Thema der Diskussion self.showAlertOfEmptyTournamentsArray() } '? – Santosh

+0

Überprüfen Sie das Array vor dem asynchronen Rückruf von observeEventType? –

+0

@Santosh das war hier der Fall. Jetzt funktioniert es richtig, danke! – michalbanan

Antwort

2

Anruf tableView.reloadData() nach oder in else sein kann:

if self.tournaments.isEmpty { 
    self.showAlertOfEmptyTournamentsArray() 
} 
tableView.reloadData() 
+0

Sie müssen auf die grüne Markierung klicken, um sie als Antwort zu akzeptieren und nicht nur zu aktualisieren. – Santosh

Verwandte Themen