2016-12-31 3 views
-1

Ich verwende derzeit Firebase und versuche, die Anzahl der untergeordneten Elemente in einem Knoten zu ermitteln, um die Zeilen für einen Abschnitt einer UITableViewController zu ermitteln. Da der Anruf jedoch asynchron ist, wird er nicht ordnungsgemäß gespeichert.Swift - Rückgabewert Asynchroner Aufruf (Firebase)

Hinweis: Ich habe einen Wert namens "count" in der Database, die die Anzahl der untergeordneten ist, zugewiesen, aber die eigentliche Funktion zum Zählen von Kindern ist auch async.

Hier ist mein Code:

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    let userID = FIRAuth.auth()?.currentUser?.uid 
    ref = FIRDatabase.database().reference() 
    var count = 0 
    if section == 0 { 
     ref.child("users").child("merchants").child(userID!).child("menu").child(spirits[section]).observeSingleEvent(of: .value, with: { (snapshot) in 
      let value = snapshot.value as? NSDictionary 
      let count = value?["count"] as? Int 
      print("count in: ", count!) 
     }) 
     print("count out: ", count) 
    } else { 
     count = 0 
    } 
    return count 
} 

Hier ist der Ausgang:

abzählen: 0 abzählen: 0 abzählen: 0 abzählen: 0 abzählen: 0 Zählung in: 1 Zählung in: 1 Zählung in: 1 Zählung in: 1 Zählung in: 1

Output

Ich habe mehrere Stack-Überlauf-Fragen durchsucht, die versuchten, Versand- oder Abschlusscodes zu erklären, und ich konnte nichts zum Arbeiten bekommen. Wie kann ich meine Zählung richtig erhalten?

Antwort

0

Laden Sie niemals Daten in eine der Datenquellenmethoden der Tabellenansicht numberOf.... Rufen Sie die Daten unter viewDidLoad oder viewWillAppear ab und rufen Sie in der Tabellenansicht reloadData() auf.

Geben Sie unter numberOfRowsInSection einfach die Anzahl der Elemente im Modell (das Datenquellenarray) zurück.

Es gibt unzählige Beispiele, wie Sie die Datenquellen der Tabellenansicht und die Delegiertenmethoden richtig verwenden.

Verwandte Themen