Nurdin
Nurdin

Reputation: 23891

Swift - could not dequeue a view of kind: UICollectionElementKindCell with identifier

I got this error message when trying to load UICollectionView.

2015-07-23 16:16:09.754 XXXXX[24780:465607] Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindCell with identifier CollectionViewCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'

First throw call stack:

My code

@IBOutlet var collectionView: UICollectionView!

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CollectionViewCell", forIndexPath: indexPath) as! CollectionViewCell
        
        cell.backgroundColor = UIColor.blackColor()
        cell.textLabel?.text = "\(indexPath.section):\(indexPath.row)"
        cell.imageView?.image = UIImage(named: "category")

        return cell

    }

I already declared CollectionViewCell in storyboard inspector but the error message still occur.

enter image description here

Upvotes: 14

Views: 18706

Answers (3)

Mohsen Hosseinpour
Mohsen Hosseinpour

Reputation: 534

For Swift 3:

collectionView.register(YourCustomCellClass.self, forCellWithReuseIdentifier: "cell")

Upvotes: 7

JMStudios.jrichardson
JMStudios.jrichardson

Reputation: 416

In your viewDidLoad() put in this code

collectionView.registerClass(YourCustomCellClass.self, forCellWithReuseIdentifier: "cell")

Upvotes: 0

Miknash
Miknash

Reputation: 7948

After taking a look at your exception:

2015-07-23 16:16:09.754 XXXXX[24780:465607] * Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindCell with identifier CollectionViewCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard' * First throw call stack:

last part is most important:

must register a nib or a class for the identifier or connect a prototype cell in a storyboard

Which means that your collection view doesn't have registered your custom cell. To resolve this add following in your viewDidLoad:

var nib = UINib(nibName: "UICollectionElementKindCell", bundle:nil)
self.collectionView.registerNib(nib, forCellReuseIdentifier: "CollectionViewCell")

Upvotes: 12

Related Questions