Unable to Dequeue Registered CollectionViewCells

130 Views Asked by At

Searched here and there but I couldn't find anything that I haven't already tried to fix my issue, so going to ask it again.

I am trying to use a collection view with custom cells.

The main collection view is in the Main View Controller.

I'm using a generic cell named GenericHomeCollectionViewCell, then customize another collection view that it has. This cell doesn't have any issue with registering and dequeuing. (It might sound weird but I already have an application with this usage and it works without any problem, so I wanted to use the same method again.)

The crash happens when I try to register and dequeue cells inside that generic cell.

I have 4 different custom cells for use which are registered in awakeFromNib().

GenericHomeCollectionViewCell.swift

override func awakeFromNib() {
    super.awakeFromNib()
    
    newsCollectionView.register(UINib(nibName: "HeadlineNewsCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "HeadlineNewsCollectionViewCell")
    newsCollectionView.register(UINib(nibName: "HomeAuthorCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "HomeAuthorCollectionViewCell")
    newsCollectionView.register(UINib(nibName: "NewsListCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "NewsListCollectionViewCell")
    newsCollectionView.register(UINib(nibName: "HomeDetailedNewCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "HomeDetailedNewCollectionViewCell")
    
    newsCollectionView.delegate = self
    newsCollectionView.dataSource = self
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if sectionType == .swipe {
        let cell : HeadlineNewsCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "HeadlineNewsCollectionViewCell", for: indexPath) as! HeadlineNewsCollectionViewCell
        cell.prepareCell(news: newsList[indexPath.row])
        return cell
     } else if sectionType == .homeAuthor {
        let cell : HomeAuthorCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "HomeAuthorCollectionViewCell", for: indexPath) as! HomeAuthorCollectionViewCell
        cell.prepareCell(news: newsList[indexPath.row])
        return cell
    } else {
        let cell : HeadlineNewsCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "HeadlineNewsCollectionViewCell", for: indexPath) as! HeadlineNewsCollectionViewCell
        cell.prepareCell(news: newsList[indexPath.row])
        return cell
     }
}

When I launch the application, I get crash with error:

*** Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:], UICollectionView.m:6502

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindCell with identifier HeadlineNewsCollectionViewCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'

I tried to give a reuse identifier name from the storyboard editor's but there is no difference.

enter image description here

0

There are 0 best solutions below