ios 7 中的 -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] 断言

Posted

技术标签:

【中文标题】ios 7 中的 -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] 断言失败【英文标题】:Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] in ios 7 【发布时间】:2014-09-27 13:39:57 【问题描述】:

我在使用两个 UICollectionView 时遇到此错误。 我搜索此错误并获得集合视图应使用 registerNib 初始化的解决方案,但在我的编码中我已经这样做了。 我的 viewDidLoad 看起来像这样

UINib *cellNib =[UINib nibWithNibName:@"myCell" bundle:nil];
[self.horizontalCollectionView registerNib:cellNib forCellWithReuseIdentifier:@"myCell"];

UICollectionViewFlowLayout *horizontalFlowLayout=[[UICollectionViewFlowLayout alloc]init];
[horizontalFlowLayout setItemSize:CGSizeMake(300, 150)];
[horizontalFlowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[self.horizontalCollectionView setCollectionViewLayout:horizontalFlowLayout];

UINib *cellNib1 =[UINib nibWithNibName:@"myCell1" bundle:nil];
[self.horizontalCollectionView registerNib:cellNib forCellWithReuseIdentifier:@"myCell"];
UICollectionViewFlowLayout *verticalFlowLayout=[[UICollectionViewFlowLayout alloc]init];
[verticalFlowLayout setItemSize:CGSizeMake(150, 150)];
[verticalFlowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
NSArray *a=[[NSArray alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",nil];
[self.verticalCollectionView setCollectionViewLayout:verticalFlowLayout];

self.dataArray=[[NSArray alloc]initWithObjects:a, nil];

cellForItemAtIndexPath 方法如下所示。

if (collectionView==self.horizontalCollectionView)


NSMutableArray *data = [self.dataArray objectAtIndex:indexPath.section];

NSString *cellData = [data objectAtIndex:indexPath.row];

static NSString *cellIdentifier = @"myCell";

UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];

UILabel *titleLabel = (UILabel *)[cell viewWithTag:1];
titleLabel.textColor=[UIColor whiteColor];
[titleLabel setText:cellData];

return cell;

else

    NSMutableArray *data = [self.dataArray objectAtIndex:indexPath.section];

    NSString *cellData = [data objectAtIndex:indexPath.row];

    static NSString *cellIdentifier1 = @"myCell";

    UICollectionViewCell *cell1 = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier1 forIndexPath:indexPath];

    UILabel *titleLabel = (UILabel *)[cell1 viewWithTag:2];
    titleLabel.textColor=[UIColor whiteColor];
    [titleLabel setText:cellData];

    return cell1;

初始化 cell1 时出错。

完整的错误信息如下。 * -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] 中的断言失败,/SourceCache/UIKit_Sim/UIKit-2935.137/UICollectionView.m:3241

【问题讨论】:

错误信息是否说明了哪种断言失败? (请将完整的错误消息粘贴到您的问题中。) 【参考方案1】:

我刚吃过这个。对我来说,问题是:

笔尖中的Collection Reusable View Identifier设置为与我在代码中使用[self.collectionView registerNib:nib forCellWithReuseIdentifier:aNib];注册的标识符不同

【讨论】:

【参考方案2】:

所以我总共花了 3 个小时来解决这个愚蠢的问题。对我来说这很糟糕,因为除了这个之外,我所做的其他单元格的工作方式完全相同。此错误具有误导性。对我来说,我在 xib 中有一个 GestureRecognizer ......是的,它甚至不必链接。一旦我把它拿出来,它就起作用了。我最终只是通过代码添加了手势识别器。 奇怪,因为它适用于自定义 UITableViewCell 但不适用于自定义 UICollectionViewCell。

希望这对任何人都有帮助!

【讨论】:

【参考方案3】:

- 你是用 Xib 还是 Storyboard 做单元格的?

我发现如果我使用了 Xib 并在 xib 中将其命名为标识符“单元格”

但我用过 [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"reuseIdentifier"] 在我的代码中;

这个崩溃了

我在我的代码中将 xib 的标识符更改为相同的,它也可以运行;

【讨论】:

【参考方案4】:

您应该在 viewDidLoad 方法中添加以下几行:

  UINib *nib = [UINib nibWithNibName:@"CollectionViewCell" bundle:nil];
  [self.collectionView registerNib:nib forCellWithReuseIdentifier:@"CollCell"]; 

其中 CollectionViewCell 是自定义 CollectioViewCell nib 文件的名称,而 CollCell 是您用于在 (UICollectionViewCell *) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 方法中使 Cell 出列的标识符

希望对你有帮助

【讨论】:

那么我的前 2 行代码是什么?我正在使用该标识符在 cellForItemAtIndex 方法中重用单元格

以上是关于ios 7 中的 -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] 断言的主要内容,如果未能解决你的问题,请参考以下文章

ios 7 中的区域监控

iOS 6 + 7 中的 iOS 隐藏状态栏和标签栏

iOS 7 中的 MultipeerConnectivityFramework

iOS 7 中的 PushViewController

容器覆盖 UITableView - iOS 7 中的 SearchBar / SearchDisplayController

iOS 6 中的导航栏看起来像 iOS 7 中的栏