12

-[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] 中的断言失败

自 IOS 7 以来我收到此错误。它在 IOS 6 中运行良好。

我环顾网络,发现了这个:

http://forums.xamarin.com/discussion/8233/ios-7-crash-in-collectionview

但是,解决方案没有意义

我想到了。我错误地使用了 CollectionView.RegisterClassForCell。显然我应该在设置视图控制器时使用 CollectionView.RegisterNibForCell 。这解决了问题。iOS 6 一定更宽容。

你们中的任何人都可以给我一个关于这个错误的提示吗

症状:

  1. 碰撞
  2. -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] 中的断言失败
  3. 适用于 IOS6 而不是 IOS 7

我怀疑的代码是这样的:

- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout*)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    CGSize sz = [BGCollectionViewCellImage defaultSize];
    return sz;
}

但这似乎太普通了。

sz 只是 100*120 的 CGSize

另一个是这样的:

- (BGCollectionViewCellImage *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    BGCollectionViewCellImage * cell = [[BGCollectionViewCellImage alloc]init];
    Image * img= self.arImages[indexPath.row];
    [cell setImg:img andIndex:indexPath.row+1];

    return cell;
}

也许我应该在 UITableViewCell 中使用 dequeue

我得到了另一个提示。如果我试图让一些单元格出队,我得到了这个:

2013-10-14 21:18:34.346 域名[24667:a0b] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法将一种视图出列:带有标识符 BGCollectionViewCellImage 的 UICollectionElementKindCell - 必须注册一个 nib 或一个类用于标识符或连接情节提要中的原型单元' *首先抛出调用堆栈:(

看来我得先注册一些东西。

4

5 回答 5

18

万一有人碰到这个,另一种可能性是如果您忘记return cell;collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath方法结束时这样做。

于 2014-10-22T07:09:10.947 回答
11

您需要使用UICollectionView 类参考中提供的相关注册方法之一注册您的单元格

- (void)registerClass:(Class)cellClass forCellWithReuseIdentifier:(NSString *)identifier;
- (void)registerClass:(Class)viewClass forSupplementaryViewOfKind:(NSString *)elementKind withReuseIdentifier:(NSString *)identifier;
- (void)registerNib:(UINib *)nib forCellWithReuseIdentifier:(NSString *)identifier;
- (void)registerNib:(UINib *)nib forSupplementaryViewOfKind:(NSString *)kind withReuseIdentifier:(NSString *)identifier;

其中相关的一个只需要在 a 的每个实例中调用一次UICollectionView

于 2013-10-14T14:59:03.293 回答
3

如果没有情节提要,您需要在 viewDidLoad 中注册您的单元格:

// Register Nib
[self.collectionView registerNib:[UINib nibWithNibName:CollectionViewCell_XIB bundle:MAIN_BUNDLE] forCellWithReuseIdentifier:CollectionViewCell_ID];

CollectionViewCell_XIB是您的单元格 xib 的名称

CollectionViewCell_ID是您的单元格 xib 的标识符

于 2013-10-14T14:54:41.287 回答
0

我有一个问题,我没有将代码中的集合视图(IBOutlet)连接到 XIB 中的集合视图,这就是我收到此错误的时候

于 2016-09-27T20:34:30.043 回答
0

fwiw 我在将项目从 swift2 转换为 swift3 时遇到了一些问题,我在一些需要 IndexPath 的地方使用 NSIndexPath。

于 2016-09-17T17:55:15.130 回答