尝试将节页脚添加到UICollectionView时崩溃

时间:2013-01-19 02:13:04

标签: ios uicollectionview uicollectionviewlayout

我正在尝试将一个页脚添加到UICollectionView,并以我不理解的方式失败。

我正在设置这样的主要单元格:

[collectionView registerClass:[PickerOpenCell class] forCellWithReuseIdentifier:cellIdentifier];
UINib *cellNib = [UINib nibWithNibName:@"PickerOpenCell" bundle:nil];
[collectionView registerNib:cellNib forCellWithReuseIdentifier:cellIdentifier];

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
flowLayout.itemSize = CGSizeMake(130, 50);

[collectionView setCollectionViewLayout:flowLayout];

xib是UICollectionViewCell的子类,只包含一个UILabel。一切正常。

现在我想添加部分页脚,所以我添加了这个(与上面的代码交错,所以setCollectionViewLayout调用仍然是序列中的最后一个):

[collectionView registerClass:[PickerOpenFooter class] forCellWithReuseIdentifier:footerIdentifier];

UINib *footerNib = [UINib nibWithNibName:@"PickerOpenFooter" bundle:nil];
[collectionView registerNib:footerNib forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:footerIdentifier];

flowLayout.footerReferenceSize = CGSizeMake(130, 2);

这次的xib是UICollectionReusableView的子类,并包含一个视图(它的意思是各部分之间的水平白线)。视图的大小为130 x 2。

当我添加footerReferenceSize行时,应用程序在setCollectionViewLayoutLine上崩溃

由于未捕获的异常'NSRangeException'而终止应用程序,原因:' - [__ NSArrayM objectAtIndex:]:索引0超出空数组的边界'

我不知道这可能是哪个阵列,谷歌没有提供任何帮助。有任何想法吗?我一定忘了把事情搞砸了,但我找不到它。

1 个答案:

答案 0 :(得分:5)

我遇到了这个问题。在

处设置断点
[collectionView setCollectionViewLayout:flowLayout];

使用lldb调试器控制台检查collectionView是否已作为collectionViewLayout实例属性

(lldb) expr collectionView.collectionViewLayout

我猜这不像你期望的那样是零,但实际上是一个UICollectionViewFlowLayout指针。您很可能已将Collection View的Layout属性设置为“界面构建器中的”流程。

不要实例化另一个流布局,只需使用已存在的布局。

UICollectionViewFlowLayout *flowLayout = (UICollectionViewFlowLayout*) collectionView.collectionViewLayout;

这解决了我的问题