Swift:表视图只返回一个单元格

时间:2017-09-22 19:33:21

标签: ios swift uitableview firebase

我正在尝试使用两个不同的原型单元加载表视图。 profileCell只应加载一次并位于表格视图的顶部。 dogCell应计算从firebase下载的名为dog的{​​{1}}个对象数组。目前,只有第一个单元格正确显示。

我认为dogs方法不能准确计算狗阵列中的狗对象。当我在numberOfRowsInSectionreturn dogs.count + 1上设置断点时,调试器会一直输出po dogs.count

当我使用0时,表格视图会加载但仅包含配置文件单元格。如果我使用return dogs.count(以考虑顶部的配置文件单元格),则在构造return dogs.count + 1时会抛出异常:“致命错误:索引超出范围”

也许我需要改变tableview重新加载数据的方式?

这是我的代码:

dogCell

1 个答案:

答案 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
        }

    }