Ich versuche, Daten aus einer Firebase-Datenbank in meinem TableView anzuzeigen. Der Code funktionierte mit "Tabs View Controller", aber für den Zweck des Projekts musste ich ein TableView in einen klassischen ViewController einbinden.iOS: Anzeigen von Firebase-Daten in TabelleView
Hier ist der Code, der die Daten aus der Datenbank abrufen und in der Tabellenansicht einschließen sollte.
import UIKit
import Firebase
import FirebaseAuth
import FirebaseDatabase
class NewsfeedViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var ref:DatabaseReference!,
posts = [eventStruct]()
@IBOutlet weak var tableview: UITableView!
struct eventStruct {
let title: String!
let date: String!
let location: String!
}
override func viewDidLoad() {
super.viewDidLoad()
loadNews()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func loadNews() {
ref = Database.database().reference()
ref.child("events").queryOrderedByKey().observe(.childAdded, with: { (snapshot) in
if let valueDictionary = snapshot.value as? [AnyHashable:String]
{
let title = valueDictionary["Title"]
let location = valueDictionary["Location"]
let date = valueDictionary["Date"]
self.posts.insert(eventStruct(title: title, date: date, location: location), at: 0)
}
})
self.tableview.reloadData()
}
//Table View Content
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return posts.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
let label1 = cell.viewWithTag(1) as! UILabel
label1.text = posts[indexPath.row].title
let label2 = cell.viewWithTag(2) as! UILabel
label2.text = posts[indexPath.row].location
let label3 = cell.viewWithTag(3) as! UILabel
label3.text = posts[indexPath.row].date
return cell
}
}
Ich bekomme keinen Fehler, aber die Daten werden nicht in der Tabelle angezeigt.
Früher musste ich Override für jede Funktion verwenden, die die Tabellenansicht steuert. Wenn ich die Überschreibung nicht habe, sollte ich diese Funktionen nicht irgendwo im Code aufrufen, damit sie funktionieren? Vielen Dank.
Ich habe diese Lösung schon versucht (das war die ursprüngliche Version, die ich geschrieben habe). Dies behebt das Problem leider immer noch nicht. –
@VictorMihaita Haben Sie Ihren Code debuggen ist, dass, wenn Block ausgeführt wird, wenn Sie den Code noch nicht debuggen, versuchen Sie, es zu debuggen und zu überprüfen, ob die Kontrolle in das geht, wenn Block oder nicht. –
Ich habe es gerade getan. Das Array erhält die korrekten Daten von der Datenbank und ich könnte jedes Element davon ausdrucken. Ich habe es genau vor dem erneuten Laden des TableView gedruckt. Das Problem besteht also nur bei der Anzeige der Daten. –