dequeueReusableSupplementaryViewOfKind 在 ios 7.1 上崩溃 - 索引 0 超出空数组的范围
dequeueReusableSupplementaryViewOfKind crash on ios 7.1 - index 0 beyond bounds for empty array
有一个包含 2 个部分的集合视图。
section 1:
rows: 0
section 2:
rows: 20
已经注册了像这样的 nibs:
[self.collectionView registerNib:[UINib nibWithNibName:@"MissionDetailHeader" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"MissionDetailHeader"];
[self.collectionView registerNib:[UINib nibWithNibName:@"MissionDetailHeaderPic" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"MissionDetailHeaderPic"];
在 ios8 上运行完美 - 但在 7.1 上它总是在 dequeueReusableSupplementaryViewOfKind
:
崩溃
- (UICollectionReusableView*)collectionView:(UICollectionView*)cv viewForSupplementaryElementOfKind:(NSString*)kind atIndexPath:(NSIndexPath*)indexPath {
UICollectionReusableView* header;
NSLog(@"LOAD SECT: %@", indexPath);
if (indexPath.section == 0) {
header = [collectionView dequeueReusableSupplementaryViewOfKind:kind
withReuseIdentifier:@"MissionDetailHeaderPic"
forIndexPath:indexPath];
} else {
header = [collectionView dequeueReusableSupplementaryViewOfKind:kind
withReuseIdentifier:@"MissionDetailHeader"
forIndexPath:indexPath];
}
return header;
}
堆栈跟踪:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'
*** First throw call stack:
(
0 CoreFoundation 0x047c61e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x009f98e5 objc_exception_throw + 44
2 CoreFoundation 0x047673f6 -[__NSArrayM objectAtIndex:] + 246
3 UIKit 0x03d18750 -[UICollectionViewFlowLayout(Internal) _frameForHeaderInSection:usingData:] + 61
4 UIKit 0x03d14afa -[UICollectionViewFlowLayout layoutAttributesForHeaderInSection:usingData:] + 61
5 UIKit 0x03d15687 -[UICollectionViewFlowLayout layoutAttributesForSupplementaryViewOfKind:atIndexPath:] + 192
6 UIKit 0x03d2f02a -[UICollectionViewData layoutAttributesForSupplementaryElementOfKind:atIndexPath:] + 363
7 UIKit 0x03cf9764 -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] + 242
8 UIKit 0x03cfa00a -[UICollectionView dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath:] + 239
9 fivexfive 0x00102e33 -[MissionDetailViewController collectionView:viewForSupplementaryElementOfKind:atIndexPath:] + 243
10 UIKit 0x03cec099 -[UICollectionView _createPreparedSupplementaryViewForElementOfKind:atIndexPath:withLayoutAttributes:applyAttributes:] + 480
11 UIKit 0x03ced775 -[UICollectionView _updateVisibleCellsNow:] + 4730
12 UIKit 0x03cf165f -[UICollectionView layoutSubviews] + 265
13 UIKit 0x03714964 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 355
14 libobjc.A.dylib 0x00a0b82b -[NSObject performSelector:withObject:] + 70
15 QuartzCore 0x0342b45a -[CALayer layoutSublayers] + 148
16 QuartzCore 0x0341f244 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
已经在 SO 周围搜索并像地狱一样用谷歌搜索 - 找不到任何hint/tip如何追踪错误。
问候
头盔
好的我自己回答 :D
删除
[self.stretchyLayout setSectionInset:UIEdgeInsetsMake(8, 8, 0, 8)];
对 setSectionInset 的所有调用 - 修复了 ios7
有一个包含 2 个部分的集合视图。
section 1:
rows: 0
section 2:
rows: 20
已经注册了像这样的 nibs:
[self.collectionView registerNib:[UINib nibWithNibName:@"MissionDetailHeader" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"MissionDetailHeader"];
[self.collectionView registerNib:[UINib nibWithNibName:@"MissionDetailHeaderPic" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"MissionDetailHeaderPic"];
在 ios8 上运行完美 - 但在 7.1 上它总是在 dequeueReusableSupplementaryViewOfKind
:
- (UICollectionReusableView*)collectionView:(UICollectionView*)cv viewForSupplementaryElementOfKind:(NSString*)kind atIndexPath:(NSIndexPath*)indexPath {
UICollectionReusableView* header;
NSLog(@"LOAD SECT: %@", indexPath);
if (indexPath.section == 0) {
header = [collectionView dequeueReusableSupplementaryViewOfKind:kind
withReuseIdentifier:@"MissionDetailHeaderPic"
forIndexPath:indexPath];
} else {
header = [collectionView dequeueReusableSupplementaryViewOfKind:kind
withReuseIdentifier:@"MissionDetailHeader"
forIndexPath:indexPath];
}
return header;
}
堆栈跟踪:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'
*** First throw call stack:
(
0 CoreFoundation 0x047c61e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x009f98e5 objc_exception_throw + 44
2 CoreFoundation 0x047673f6 -[__NSArrayM objectAtIndex:] + 246
3 UIKit 0x03d18750 -[UICollectionViewFlowLayout(Internal) _frameForHeaderInSection:usingData:] + 61
4 UIKit 0x03d14afa -[UICollectionViewFlowLayout layoutAttributesForHeaderInSection:usingData:] + 61
5 UIKit 0x03d15687 -[UICollectionViewFlowLayout layoutAttributesForSupplementaryViewOfKind:atIndexPath:] + 192
6 UIKit 0x03d2f02a -[UICollectionViewData layoutAttributesForSupplementaryElementOfKind:atIndexPath:] + 363
7 UIKit 0x03cf9764 -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] + 242
8 UIKit 0x03cfa00a -[UICollectionView dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath:] + 239
9 fivexfive 0x00102e33 -[MissionDetailViewController collectionView:viewForSupplementaryElementOfKind:atIndexPath:] + 243
10 UIKit 0x03cec099 -[UICollectionView _createPreparedSupplementaryViewForElementOfKind:atIndexPath:withLayoutAttributes:applyAttributes:] + 480
11 UIKit 0x03ced775 -[UICollectionView _updateVisibleCellsNow:] + 4730
12 UIKit 0x03cf165f -[UICollectionView layoutSubviews] + 265
13 UIKit 0x03714964 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 355
14 libobjc.A.dylib 0x00a0b82b -[NSObject performSelector:withObject:] + 70
15 QuartzCore 0x0342b45a -[CALayer layoutSublayers] + 148
16 QuartzCore 0x0341f244 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380
已经在 SO 周围搜索并像地狱一样用谷歌搜索 - 找不到任何hint/tip如何追踪错误。
问候 头盔
好的我自己回答 :D
删除
[self.stretchyLayout setSectionInset:UIEdgeInsetsMake(8, 8, 0, 8)];
对 setSectionInset 的所有调用 - 修复了 ios7