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
应始终处于连贯状态。此外,依赖tag
s 是脆弱的。您的单元格应该只有一个 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 的致命错误