2017-08-01 26 views
1

Ich versuche, eine Tabellenansicht aus meiner Firebase-Datenbank zu aktualisieren. Meine Daten werden wie folgt aus (für die Berichterstattung Automobile) aufgebaut:Tabellenansicht nicht mit Firebase aktualisieren

  1. Berichte:
    • Zufällig generierte Bericht ID-Nummer:
      • machen: "Auto machen"
      • Modell: "Marke des Modells"

Ich glaube nicht, dass ich die Daten richtig nenne. Ich weiß nicht, wie ich die zufällige Berichts-ID auswählen soll. Aber es kann noch etwas anderes geben, das ich vermisse. Ich versuche, nur die Marke und Modell des Fahrzeugs erhalten im Text der Zelle dieses

var reportList:[String] = [] 

var ref: DatabaseReference! 

var handle: DatabaseHandle? 


@IBOutlet weak var reportsTableView: UITableView! 

@IBAction func backButtonPressed(_ sender: UIBarButtonItem) { 
    self.performSegue(withIdentifier: "reportsToHome", sender: self) 
} 

public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return reportList.count 

} 


public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{ 
    let cell = UITableViewCell(style: .default, reuseIdentifier: "cell") 

    cell.textLabel?.text = reportList[indexPath.row] 

    return cell 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    ref = Database.database().reference() 

    handle = ref.child("Reports").observe(.childAdded, with: { (snapshot) in 
     if (snapshot.value as? String) != nil 
     { 
      let make = String(describing: self.ref.child("Reports").child("make")) 
      let model = String(describing: self.ref.child("Reports").child("model")) 
      self.reportList.append(make + model) 

      self.reportsTableView.reloadData() 
     } 
    } 

    // Do any additional setup after loading the view. 
)} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

}

+0

Versuchen Sie, mehrere Berichte zu erhalten, oder gibt es nur den einen Bericht? – Grady

+0

Es wird mehrere Berichte geben. Die Datenbank prüft, ob neue Berichte eingehen, und sendet sie. Oder zumindest soll es so sein. – Bob

Antwort

2

Ich bin nicht in der Lage anzeigen zu testen, aber ich habe das Gefühl, dass Sie versuchen, um den Schnappschuss als String zu erzeugen. Sie sollten es stattdessen als Dictionary verwenden, damit Sie die Daten einfach per Schlüssel abrufen können.

Versuchen Sie diesen Code. Es setzt den Schnappschuss als Wörterbuch, und von dort sind Sie in der Lage, die Marke und das Modell abzurufen:

override func viewDidLoad() { 
super.viewDidLoad() 

ref = Database.database().reference() 

handle = ref.child("Reports").observe(.childAdded, with: { (snapshot) in 
    if let reports = snapshot.value as? NSDictionary { 
     var make = reports?["make"] as? String 
     var model = reports?["model"] as? String 

     self.reportList.append(make + model) 
     self.reportsTableView.reloadData() 
    } 
} 
)} 

geht weiter, können Sie einen Report-Klasse erstellen:

class Report: NSObject { 
    var make: String? 
    var model: String? 
} 

Anschließend können Sie die Erstellen und modellieren Sie aus dem Snapshot, um ein neues Berichtsobjekt zu erstellen.

var make = reports?["make"] as? String 
var model = reports?["model"] as? String 
let newReport = Report() 
newReport.setValuesForKeys(reports) 

Ich hoffe, das funktioniert, wenn nicht, werde ich wieder schauen.

+1

Ich habe es versucht, aber es hat nicht funktioniert. Ich werde in der Zwischenzeit mit der Report-Klasse herumspielen. EDIT: Macht nichts. Es funktioniert, ich hatte beim Bearbeiten versehentlich zu viel gelöscht. Vielen Dank für die Hilfe! – Bob

Verwandte Themen