我收到了错误......
*** Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:], /SourceCache/UIKit/UIKit-2372/UICollectionView.m:2249
尝试显示UICollectionView时。
造成它的线是......
static NSString *CellIdentifier = @"Cell";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
出列时发生错误。
没有其他错误,所以我很难知道从哪里开始。
有人能说清楚这个吗?
答案 0 :(得分:37)
您需要注册如下:
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"MY_CELL"];
答案 1 :(得分:29)
正在阅读文档(应该首先完成这个:))
无论如何,我使用的collectionView是在一个单独的xib文件(不是故事板)和文档中...
Important: You must register a class or nib file using the
registerClass:forCellWithReuseIdentifier: or
registerNib:forCellWithReuseIdentifier: method before calling this method.
由于
答案 2 :(得分:3)
如果您使用registerNib:
方法,请确保
UINib *nibH = [UINib nibWithNibName:HEADER_ID bundle:nil];
[collectionView registerNib:nibH
forSupplementaryViewOfKind:UICollectionElementKindSectionHeader
withReuseIdentifier:HEADER_ID];
nib文件中的 ALSO ,当您选择顶级集合可重用视图时,请使用属性检查器,确保 Identifier
是设置为您传入withReuseIdentifier:
参数的相同值。
答案 3 :(得分:2)
我遇到了同样的问题。以下是我如何解决它。
移动
[self.pictureCollectionView registerNib:[UINib nibWithNibName: bundle:nil] forCellWithReuseIdentifier:reuseID]
位于- (void)viewDidLoad
,
而非方法- (void)awakeFromNib
。
答案 4 :(得分:1)
我仅在iOS 9上崩溃了(iOS 10/11正常工作)。
我没有Flow Layout的自定义子类,而是直接在现有的子类上设置headerReferenceSize
。
因此,在启用了 Section Header 的Interface Builder中,发生了此崩溃,没有选中标记,一切都正常运行,并且由于我在代码中设置了大小,因此标题正确显示。
答案 5 :(得分:0)
替换
NSString *CellIdentifier = @"Cell";
与
static NSString *CellIdentifier = @"Cell";
答案 6 :(得分:0)
在使用具有唯一ReuseIdentifier的多个UICollectionView时,我看到此错误弹出。在ViewDidLoad中,您想要注册每个CollectionView的reuseIdentifier,如下所示:
[_collectionView1 registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"collectionView1CellIdentifier"];
[_collectionView2 registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"collectionView2CellIdentifier"];
然后当你到达" - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath"你想确保你没有尝试将collectionView1的单元格设置为collectionView2的reuseIdentifier,否则你将收到此错误。
不要这样做 :(或者,在看到预期的标识符之前,collectionView2会看到错误的标识符并抛出拟合)
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionView1CellIdentifier" forIndexPath:indexPath];
if(collectionView != _collectionView1){
cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionView2CellIdentifier" forIndexPath:indexPath];
}
cell.backgroundColor = [UIColor greenColor];
return cell;
DO THIS :
UICollectionViewCell *cell;
if(collectionView == _collectionView1){
cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionView1CellIdentifier" forIndexPath:indexPath];
}else{
cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"collectionView2CellIdentifier" forIndexPath:indexPath];
}
cell.backgroundColor = [UIColor greenColor];
return cell;