Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS Assertion Failure in UICollectionView

I'm getting the error ...

*** Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:], /SourceCache/UIKit/UIKit-2372/UICollectionView.m:2249

When trying to display a UICollectionView.

The lines causing it are...

static NSString *CellIdentifier = @"Cell";

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

Error happening on the dequeue.

There are no other errors so I'm struggling to know where to begin with this.

Can anyone shed light on this?

like image 555
Fogmeister Avatar asked Sep 26 '12 10:09

Fogmeister


4 Answers

You need to register like below:

[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"MY_CELL"];
like image 137
Gaurav Avatar answered Nov 08 '22 10:11

Gaurav


Been reading the docs (should possibly have done this first :) )

Anyway, the collectionView I am using is within a separate xib file (not a storyboard) and from the docs...

Important: You must register a class or nib file using the
registerClass:forCellWithReuseIdentifier: or
registerNib:forCellWithReuseIdentifier: method before calling this method.

Thanks

like image 20
Fogmeister Avatar answered Nov 08 '22 09:11

Fogmeister


Make sure that if you use the registerNib: method:

UINib *nibH = [UINib nibWithNibName:HEADER_ID bundle:nil];
[collectionView registerNib:nibH
 forSupplementaryViewOfKind:UICollectionElementKindSectionHeader 
        withReuseIdentifier:HEADER_ID];

that ALSO in the nib file, when you select the top-level collection reusable view, use the attributes inspector, and make sure the Identifier is set to the same value you are passing in to the withReuseIdentifier: parameter.

like image 3
bshirley Avatar answered Nov 08 '22 10:11

bshirley


I had the same problem. Here's how I solved it.

Move

[self.pictureCollectionView registerNib:[UINib nibWithNibName: bundle:nil] forCellWithReuseIdentifier:reuseID]

to be in - (void)viewDidLoad,

rather than method - (void)awakeFromNib.

like image 4
U.Jhon Avatar answered Nov 08 '22 10:11

U.Jhon