Swift 4:集合视图“ cellForItemAt”索引超出范围

时间:2019-01-28 08:19:35

标签: ios swift uicollectionview

我的索引超出了致命错误范围。我试图在一个Table View控制器的一个单元中实现2个集合视图。两者都有不同的数据源。从数据源将图像数据加载到单元中时,由于此错误,第二个收集视图单元未加载图像数据。 即使我转储df %>% group_by(ID) %>% mutate(SUM = rollsumr(VAL, k=3, fill = NA), SUM = ifelse(row_number() < 3, cumsum(VAL), SUM)) 的内容时,它也有5个(键,值)对形式的对象 错误发生在下面的行

BannerList

我看过其他类似的问题,但是没有一个有用的

let bannerList = BannerList[indexPath.row]

这是collectionView的“ numberOfItems”的实现

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! Top_PageCollectionViewCell

    if (collectionView === upperBannerCollectionView) {
        if OtokuList.count > 0 {
            let otokulist2 = OtokuList[indexPath.row]
            cell.load_image(otokulist2.banner_image)
        }
    } else {
        if BannerList.count > 0 {
            let bannerList = BannerList[indexPath.row]
            cell.load_image(bannerList.banner_image)
        }
    }
    return cell
}

添加了带有图像的print(BannerList)调试

debug of print(BannerList) debugger screenshot

在尝试从数据源BannerList加载数据时,不应出现此类索引超出范围错误。

1 个答案:

答案 0 :(得分:0)

首先,我认为您的主要问题是“ numberOfItemsInSection”中的数组。

让我们假设您在“ numberOfItemsInSection ”中使用 OtokuList.count 那时OtokuList有3个项目,而BannerList只有1个项目。

 if BannerList.count > 0 { //this validation will work even if indexPath.row is 2
       let bannerList = BannerList[indexPath.row] //this line will crash
       cell.load_image(bannerList.banner_image)
  }

我对此的解决方案是:

if BannerList.count > indexPath.row {
      let bannerList = BannerList[indexPath.row]
      cell.load_image(bannerList.banner_image)
}