线程1:致命错误:索引超出tableViewCell的范围

时间:2019-01-06 14:48:37

标签: swift uitableview

我有错误说“线程1:致命错误:索引超出范围”。

cell.titleLabel.text = cellDataArrayPoster[indexPath.row].jobTitlePoster as? String

请注意,我正在使用两个不同的单元格, 作为prototypeCells。而且,它们都有不同的标识符。 这两个阵列都从firebase获取数据。

var cellDataArray = [cellData]()
var cellDataArrayPoster = [cellDataPoster]()


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

   return cellDataArray.count + cellDataArrayPoster.count
}

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

    let index = indexPath.row

    if index == 0 {

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

        cell.titleLabel.text = cellDataArray[indexPath.row].jobTitle as? String
        cell.companyLabel.text = cellDataArray[indexPath.row].companyName
        //cell.timeStampLabel.text = cellDataArray[indexPath.row].createdAt.calenderTimeSinceNow()

        return cell

    } else  {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cellPoster", for: indexPath) as! infoCellPoster
        cell.titleLabel.text = cellDataArrayPoster[indexPath.row].jobTitlePoster as? String
        //cell.timeStampLabel.text = cellDataArray[indexPath.row].createdAt.calenderTimeSinceNow()
        return cell
    }


}

1 个答案:

答案 0 :(得分:1)

您误解了表视图委托方法的概念。最好从documentation阅读更多信息。

我的一般经验法则是始终仅使用1个数组作为表视图的数据源,以避免索引超出范围的情况。

在您的特定情况下,错误说明了所有相关信息-您正在尝试获取超出数组范围的索引号。最简单的解决方法是将两个数组合并为一个,并在对象之间具有某种继承关系,以便它们适合。