2016-06-29 66 views
0

所以我改变了这一点:终止应用程序由于未捕获的异常 'NSRangeException'

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 

    return CGSizeMake(view.frame.width/2, 40) 

} 

这样:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(collectionViewCellId, forIndexPath: indexPath) as! CollectionViewCell 

    return CGSizeMake(view.frame.width/2, 40) 

} 

,由于某种原因崩溃。我甚至不会把这个常数用到,但它会让人感到困惑。

完整的错误:终止应用程序由于未捕获的异常 'NSRangeException',原因: '*** - [__ NSArrayM objectAtIndex:]:指数1超出范围[0 .. 0]'

我的目标是使单元格的宽度标签的宽度相同+ 5

cell.label.frame.width + 5

回答

0

您有错误。有些东西不能像你期望的那样工作。如果你坚持认为这个错误出现在你发布的代码中,并且你发布的代码是正确的,那么你永远不会发现你生活中的问题。

有一个崩溃。规则1:崩溃是你的错误。 您的代码是错误的。你的任务是找出哪些代码是错误的。规则2:崩溃并不在乎你打算做什么。你说“我的目标是使单元的宽度与标签的宽度相同+ 5”。 iOS正在为此而大笑。它告诉你问题是什么:当数组只有一个元素时,您正在访问索引为1的数组。它有什么也没有与你认为你的问题是什么。

规则3:阅读错误信息并理解它。忘记你认为应该发生,因为它没有发生。错误消息告诉你事实。

设置异常断点(google为“异常Xcode断点”,更好:学会使用你的工具)。当它发生时,请按照堆栈跟踪找到导致它的代码。

1

其原因可能是您发布不正确的小区标识,而这种细胞与这样的标识符就是不存在这样的索引路径,检查你的单元格标识符,代码的其他部分应该工作正常。

+0

我将完全相同的代码行添加到cellForItemAtIndexPath,它工作得很好 – luke

+0

尽量不要使用dequReusableCell函数。集合视图具有将返回单元格的功能。它的名字是一些如何cellForItemAtIndexPath.u。 – Volodymyr

+0

我不明白你的建议。我已经调用了该函数来确定单元格的外观。我相信我不能使用该函数返回单元格的大小。 – luke

相关问题