我当时正在关注一些过时的YouTube教程,并在此问题上停留了3天。我正在制作一个简单的待办事宜应用程序。我想在tableView中显示数据库中所有任务的名称。Firebase Query/TableView问题
数据库的构建:
-Task
-unique task ID
-description
-name
所以我试图抢在数据库中的所有任务的名称,并在显示的tableView他们。
以下是我有:
ref = FIRDatabase.database().reference()
var tasks: [Task] = []
ref.child("Task").queryOrderedByKey().observe(.childAdded, with: { snapshot in
let snapshotValue = snapshot.value as? NSDictionary
let taskName = snapshotValue?["name"] as? String
let taskDescrip = snapshotValue?["description"] as? String
let addTask = Task()
addTask.descrip = taskDescrip!
addTask.name = taskName!
self.tasks.append(addTask)
self.tableView.reloadData()
})
一切打印效果与预期,但是当我添加代码来呈现在的tableView细胞的名称,该应用程序崩溃,每一次和版画
"fatal error: Index out of range"
在问候了tasks[indexPath.row]
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if tasks.count == 0 {
return 1
}
return tasks.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
if tasks.count == 0 {
cell.textLabel?.text = "No tasks"
}
let thisTask = tasks[indexPath.row]
cell.textLabel?.text = thisTask.name
return cell
}
问题通过让thisTask =任务[indexPath.row]引起的。任务中有0个元素,并且您将最小行数设置为1.因此,在访问任务[0]时,您会得到该错误。 – Dari
ref.child(“Task”)正在侦听任务节点...如果您的目的是要听新的孩子添加,我认为您需要听取“任务** **”,如果这符合您的结构,并且你需要按照Nirav D的答案为tableView。 – Jad
谢谢大家@Jad – user3344239