我正在尝试从Firebase实时数据库中检索我的数据,但是该数据没有出现在我的UITableView
中。我正在检索数据,并尝试将其附加到我创建的名为Party
的数据模型类型的数组中。我不确定如何设置我的代码,以便可以成功地将数据从Firebase获取到我的UITableView
,也不确定问题出在哪里。
我尝试整理我的代码,并使用其他方法从Firebase检索数据,但没有任何效果。我创建了一个名为party的数组,用于存储Party
类型的信息。
以下是我的UITableViewController
重写功能的代码。这是我的Firebase数据库的大部分代码所在的地方。这是带有自定义单元格的表格视图。
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Set the Firebase reference.
ref = Database.database().reference()
// Retrieve the parties and listen for changes.
ref?.child("parties").observeSingleEvent(of: .value, with: { (snapshot) in
// Take the value from the snapshot and add it to the parties array.
let value = snapshot.value as? NSDictionary
let titleText = value?["titleText"] as? String ?? "Title"
let dateText = value?["dateText"] as? String ?? "Date"
let timeText = value?["timeText"] as? String ?? "Time"
self.parties.append(Party(title: titleText, date: dateText, time: timeText))
})
tableView.reloadData()
guard let cell = tableView.dequeueReusableCell(withIdentifier: "YourPartiesTableViewCell", for: indexPath) as? YourPartiesTableViewCell else {
fatalError("The dequeued cell is not an instance of YourPartiesTableViewController")
}
let party = parties[indexPath.row]
// Configure the cell
cell.titleLabel.text = party.titleText
cell.dateAndTimeLabel.text = "\(party.dateText) at \(party.timeText)"
cell.inviationsLabel.text = "0 people"
cell.view.layer.cornerRadius = 15
return cell
}
我希望它可以将Firebase中的数据附加到多方数组。然后,我希望该数据显示在表格视图中。为什么没有发生?我的代码在哪里错了?
答案 0 :(得分:2)
您不应该在cellForRowAt
内加载任何数据,因为dataSource数组中的每个实例都会调用该数据,并删除reloadData
也不会导致递归调用
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return parties.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "YourPartiesTableViewCell", for: indexPath) as? YourPartiesTableViewCell else {
fatalError("The dequeued cell is not an instance of YourPartiesTableViewController")
}
let party = parties[indexPath.row]
// Configure the cell
cell.titleLabel.text = party.titleText
cell.dateAndTimeLabel.text = "\(party.dateText) at \(party.timeText)"
cell.inviationsLabel.text = "0 people"
cell.view.layer.cornerRadius = 15
return cell
}
func loadData() {
// Set the Firebase reference.
ref = Database.database().reference()
// Retrieve the parties and listen for changes.
ref?.child("parties").observeSingleEvent(of: .value, with: { (snapshot) in
// Take the value from the snapshot and add it to the parties array.
let value = snapshot.value as? NSDictionary
let titleText = value?["titleText"] as? String ?? "Title"
let dateText = value?["dateText"] as? String ?? "Date"
let timeText = value?["timeText"] as? String ?? "Time"
self.parties.append(Party(title: titleText, date: dateText, time: timeText))
self.tableView.reloadData()
})
}
从loadData
呼叫viewDidLoad