我當時正在關注一些過時的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