Swift CollectionView(致命错误:索引超出范围)

Posted

技术标签:

【中文标题】Swift CollectionView(致命错误:索引超出范围)【英文标题】:Swift CollectionView (fatal error: Index out of range) 【发布时间】:2018-09-17 01:45:29 【问题描述】:

我正在 UITableView 的每个单元格内实现 UICollectionView 现在我从 API 获取数据并将这些数据保存在数组中,问题是 UICollectionView 委托方法 numberOfItemsInSection 在数组填充数据之前当然会被调用,所以我得到 Index out of range 错误。 问题是如何为返回的计数提供默认值或如何改变数组。 这是我正在使用的代码:

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
  //  let cell = collectionView.superview as! MainTableViewCell
 //   let index = tableView.indexPath(for: cell)
    let countIndex = self.consultations[collectionView.tag].images.count

    return countIndex

【问题讨论】:

您可能遇到了重复使用单元格的问题。在提供数据之前是否调用numberOfItems 无关紧要;您应该在重新使用时清除阵列。 self.consultations 应始终处于连贯状态。此外,依赖tags 是脆弱的。您的单元格应该只有一个 images 数组;它不需要知道任何封闭数组。 【参考方案1】:

您需要检查找到的数组及其计数。

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
if let consultationsTmp = self.consultations, let colTag = consultationsTmp[collectionView.tag],let imagesTmp = colTag.images
            
      return imagesTmp.count
            
return 0

【讨论】:

Thanx 伙计,但我还有一个问题,我怎样才能获得 UICollectionView 所在的 UITableViewCell 的索引? 请发布一个包含所有详细信息的其他问题。请接受并投票赞成答案。【参考方案2】:

我用不同的方法解决了这个问题。

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    let cell = collectionView.superview?.superview?.superview as! MainTableViewCell
    print("SSSSSSSSSSSSSSSSS\(cell)")
    let index = self.tableView.indexPathForRow(at: cell.center)
    print("EEEEEEEEEEEEEE\(index?.row)")
    let countIndex = self.consultations[index?.row ?? 00].images.count

    return countIndex

【讨论】:

以上是关于Swift CollectionView(致命错误:索引超出范围)的主要内容,如果未能解决你的问题,请参考以下文章

CollectionView - 致命错误:索引超出范围 - 比视图显示的单元格多

CollectionView 致命错误:在展开可选值时意外发现 nil

使用 AlamoFireImage 在 CollectionView 中使用 .af_setImage 方法加载数组 url 的致命错误

Swift - 创建没有 Storyboard initWithFrame 错误的 collectionView

Swift CollectionView 显示错误

致命错误:索引超出范围:Swift