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

a14dhokn  于 2022-10-31  发布在  Swift
关注(0)|答案(2)|浏览(173)

我正在获取超出范围的索引致命错误。我正在尝试在表视图控制器的一个单元格中实现2个集合视图。这两个视图具有不同的数据源。在从数据源加载单元格中的图像数据时,由于此错误,第二个集合视图单元格未加载图像数据。即使我转储BList的内容,它仍在(key,value)对方式错误发生在以下行
let bannerList = BList[indexPath.row]
我看过其他类似的问题,但没有一个是有用的

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

    if (collectionView === upperBannerCollectionView) {
        if OList.count > 0 {
            let olist2 = OList[indexPath.row]
            cell.load_image(olist2.banner_image)
        }
    } else {
        if BList.count > 0 {
            let blist = BList[indexPath.row]
            cell.load_image(blist.banner_image)
        }
    }
    return cell
}

下面是collectionView的'numberOfItems'的实现

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
    {
        if (collectionView === uBCollectionView) {
            return self.OList.count
        } else {
            return self.BList.count
        }
    }

添加了带图像的打印(BList)调试
debug of print(BList)debugger screenshot显示器
在尝试从数据源BannerList加载数据时,我不应该得到这样的索引超出范围错误。

cetgtptt

cetgtptt1#

首先,我认为你的主要问题是“numberOfItemsInSection”中的数组。
假设您正在“numberOfItemsInSection”中使用OtokuList.count,此时OtokuList有3个项目,而BannerList只有一个项目。

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)
}
ddrv8njm

ddrv8njm2#

我认为这个问题发生在collectionView找不到索引的时候。要解决这个问题,我们需要应用小检查。yourArray.count〉indexPath.row。

if cellData.viewModel.serviceCategoriesArray.count > indexPath.row {

        cellData.viewModel.selectedCategory = cellData.viewModel.serviceCategoriesArray[indexPath.row]
    }

相关问题