未找到委托方法索引路径

时间:2017-04-19 17:35:28

标签: swift uicollectionview uicollectionviewdelegate

我已经为UICollectionViewDelegateFlowLayout实现了这个委托方法,但在尝试将单元格出列时,我收到此错误:

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

如果我尝试这样做,我也会得到这个:let cell = collectionView.cellForItem(at: indexPath) as! RQTTipCell

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TipCell", for: indexPath) as! RQTTipCell
        let height = self.proxyView!.tipCollect.contentSize.height
        let width = cell.bagRatio.multiplier / height
        return CGSize(width: width, height: height)

    }

这个indexPath应该是正确的,但似乎不是。

1 个答案:

答案 0 :(得分:0)

如果检查错误含义,则表示您尝试从阵列中获取的项目不可用。

 *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

您正尝试在索引1处获取某些内容,但您的数组大小为[0 .. 0]

现在为什么会这样?

  • 简单的解释是当您尝试从CollectionView获取单元格时,它在该运动中不可用。原因是Cell已被添加。

现在如何修复,在这里使用optional

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "TipCell", for: indexPath) as? RQTTipCell {
       let height = self.proxyView!.tipCollect.contentSize.height
       let width = cell.bagRatio.multiplier / height
       return CGSize(width: width, height: height)
    } else {
       // default CGSzie
       CGSize()
    }

}