Swift超出范围....使用tableView [indexPath]

时间:2017-07-14 07:43:53

标签: ios swift uitableview indexpath

我遇到了range错误......

错误发生在cell.creditLabel.text = numOfDays[(indexPath as NSIndexPath).row] + "days"

如果我将tableView.reloadData()放在cell.nameLabel.text = nameArray[(indexPath as NSIndexPath).row]

之后

然后模拟器中没有任何内容......

我该如何解决这个问题..?

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return self.nameArray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell : MoneyTableViewCell = tableView.dequeueReusableCell(withIdentifier: "MoneyTableViewCell", for: indexPath) as! MoneyTableViewCell


    cell.nameLabel.text = nameArray[(indexPath as NSIndexPath).row]

    cell.creditLabel.text = numOfDays[(indexPath as NSIndexPath).row] + "days"
    cell.levelLabel.text = creditArray[(indexPath as NSIndexPath).row]

    cell.layoutIfNeeded()

    return cell
}

3 个答案:

答案 0 :(得分:5)

您需要检查阵列。从我在这里看到的情况来看,numOfDays的元素少于nameArray。此外,当你在那里检查creditArray时:)

此外,无需投射到NSIndexPath

答案 1 :(得分:1)

“numOfDays”数组中的元素数小于“nameArray”数组中的元素数

答案 2 :(得分:1)

检查数组是否包含正确数量的项目:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return self.nameArray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell : MoneyTableViewCell = tableView.dequeueReusableCell(withIdentifier: "MoneyTableViewCell", for: indexPath) as! MoneyTableViewCell


    cell.nameLabel.text = nameArray[indexPath.row]

    if numOfDays.count < indexPath.row {
        cell.creditLabel.text = numOfDays[indexPath.row] + "days"
    }

    if creditArray.count < indexPath.row {
        cell.levelLabel.text = creditArray[indexPath.row]
    }

    return cell
}

另外,我已经删除了不必要的indexPath和layoutIfNeeded(单元格将再次绘制,因为它是新的)。