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 中的 MultipeerConnectivityFramework
容器覆盖 UITableView - iOS 7 中的 SearchBar / SearchDisplayController