【发布时间】:2017-01-03 08:42:34
【问题描述】:
我正在关注一些过时的 youtube 教程,并且已经在这个问题上停留了 3 天。我正在制作一个简单的待办事项应用程序。我想在 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 单元格中呈现名称时,应用程序每次都会崩溃并打印
“致命错误:索引超出范围”
关于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
}
【问题讨论】:
-
问题是由 let thisTask = tasks[indexPath.row] 引起的。任务中有 0 个元素,并且您将最小行数设置为 1。因此,在访问任务 [0] 时,您遇到了该错误。
-
ref.child("Task") 正在监听任务节点...如果您的目的是监听添加的新子节点,我认为您需要监听“Tasks" 如果这符合您的结构,并且您还需要遵循 Nirav D 对 tableView 的回答。
-
谢谢你们@Jad
标签: ios arrays swift firebase firebase-realtime-database