7

在我的应用程序中,有一个使用 flowLayout 的 UICollectionView,它在 iOS 6 中运行良好,但在 iOS 7 中却严重失败。一旦我转到包含我的 UICollectionView 的视图,就会发生以下情况:

*** Assertion failure in -[UICollectionView _createPreparedSupplementaryViewForElementOfKind:atIndexPath:withLayoutAttributes:applyAttributes:], /SourceCache/UIKit/UIKit-2903.2/UICollectionView.m:1401
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'the view returned from -collectionView:viewForSupplementaryElementOfKind:atIndexPath
(UICollectionElementKindSectionHeader,<NSIndexPath: 0x145f3f50> {length = 2, path = 0 - 0}) was not retrieved by calling -dequeueReusableSupplementaryViewOfKind:withReuseIdentifier:forIndexPath: or is nil'
(<UICollectionReusableView: 0x145f9400; frame = (0 0; 320 20); layer = <CALayer: 0x145f90c0>>)
4

7 回答 7

13

当我更新到 iOS 7 时,我遇到了这个问题。问题最终是您不应该对数据源如此明确。如果您有以下情况,请将其删除:

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
    return nil;
}
于 2013-10-01T17:21:02.160 回答
6

nil如果您在此函数中返回,它将崩溃:

- (UICollectionReusableView*)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath

基本上,您必须返回的唯一原因nil是“种类”NSString不是您期望的类型。在这种情况下,只需在界面构建器中删除该对象。我遇到了同样的崩溃,因为我的集合视图在界面构建器中有一个页脚,但我没有调用registerNib代码(如上所述)来设置页脚。我会到达viewForSupplementaryElementOfKind并返回 nil,因为这是我没想到的一种。(这肯定会导致崩溃)。

于 2013-10-28T03:39:16.583 回答
1

我有这个问题,已解决

我认为您可以检查是否检查了 IB Collection View -> Accessories -> Section Header 中的 Section Header

于 2014-07-14T22:12:03.530 回答
1

你需要用你的 UICollectionView 实例注册一个 UINib:

UINib *nib = [UINib nibWithNibName:@"YourNibNameWithoutExtension" bundle:nil];
[collectionView registerNib:nib forCellWithReuseIdentifier:@"YourReuseIdentifier"];

并通过创建所有 UICollectionViewCell 实例-[UICollectionView dequeueReusableCellWithReuseIdentifier:forIndexPath:]

Apple 的 UICollectionView.h 中的这条评论解释了这个要求:

// The cell that is returned must be retrieved from a call to -dequeueReusableCellWithReuseIdentifier:forIndexPath:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;
于 2013-09-27T01:30:51.680 回答
1

我收到这个是因为忘记在界面生成器中将我的类设置为正确的类型,而不是连接和插座

于 2015-09-30T16:50:55.697 回答
0

您收到该错误是因为您的集合有一个标题。我在 IB 中添加标题后得到了这个。删除标题或检查标题选项的委托

于 2014-03-12T10:57:38.953 回答
0

确保您已设置集合视图数据源和委托。在我的情况下,这个错误是因为它而被抛出的。

于 2015-11-05T10:28:26.737 回答