我正在尝试使用两个不同的原型单元加载表视图。 profileCell
只应加载一次并位于表格视图的顶部。 dogCell
应计算从firebase下载的名为dog
的{{1}}个对象数组。目前,只有第一个单元格正确显示。
我认为dogs
方法不能准确计算狗阵列中的狗对象。当我在numberOfRowsInSection
和return dogs.count + 1
上设置断点时,调试器会一直输出po dogs.count
。
当我使用0
时,表格视图会加载但仅包含配置文件单元格。如果我使用return dogs.count
(以考虑顶部的配置文件单元格),则在构造return dogs.count + 1
时会抛出异常:“致命错误:索引超出范围”
也许我需要改变tableview重新加载数据的方式?
这是我的代码:
dogCell
答案 0 :(得分:0)
我在写完这个问题后不久就找到了解决方案,但我认为其他人阅读可能会有所帮助。
因为第一个indexPath.row专用于配置文件单元格,所以我不应该使用indexPath.row来导航我的狗数组。相反,我应该使用indexPath.row - 1
来获得正确的狗索引。
以下是我更新的部分:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
let profileCell = tableView.dequeueReusableCell(withIdentifier: "profileCell", for: indexPath) as! ProfileTableViewCell
profileCell.nameLabel.text = user.name
profileCell.totalReputationLabel.text = String(describing: user.reputation!)
profileCell.usernameLabel.text = user.username
return profileCell
} else {
let dogCell = tableView.dequeueReusableCell(withIdentifier: "dogCell", for: indexPath) as! DogTableViewCell
dogCell.dogBreedLabel.text = dogs[indexPath.row - 1].breed
dogCell.dogNameLabel.text = dogs[indexPath.row - 1].name
dogCell.dogScoreLabel.text = String(describing: dogs[indexPath.row - 1].score)
dogCell.dogImageView.image = dogs[indexPath.row - 1].picture
dogCell.dogCreatorButton.titleLabel?.text = dogs[indexPath.row - 1].creator
dogCell.dogVotesLabel.text = "0"
return dogCell
}
}