IOS UICollectionView insertItemsAtIndexPaths crashes when the title is on the screen

I have a UICollectionView with a non-zero size header. It seems that when insertItemsAtIndexPaths is insertItemsAtIndexPaths , if the title is on the screen, the program crashes with the following message:

 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: <_UICollectionViewItemKey: 0xa38c910> Type = SV Kind = UICollectionElementKindSectionHeader IndexPath = <NSIndexPath 0xa38c7c0> 2 indexes [0, 0])' 

When the title size is zero or when the title is not displayed on the screen, calling insertItemsAtIndexPaths works fine. Does anyone know how to fix this? Thanks!

A class is a subclass of the UICollectionViewController class. Here is the code related to UICollectionView:

 - (id)init { // Collection view layout UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; layout.itemSize = CGSizeMake(100, 100); layout.headerReferenceSize = CGSizeMake(320, 50); // Left for the switch layout.minimumInteritemSpacing = 5; layout.minimumLineSpacing = 5; layout.scrollDirection = UICollectionViewScrollDirectionVertical; layout.sectionInset = UIEdgeInsetsMake(5, 5, 5, 5); if (self = [super initWithCollectionViewLayout:layout]) { // Collection view setup [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"ID"]; self.collectionView.frame = CGRectMake(0, -20, 320, 480-20-44-49); self.collectionView.backgroundView = nil; self.collectionView.backgroundColor = [UIColor clearColor]; ... } return self; } 

Then I implemented two delegate methods:

 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return [blogs count]; } 

and

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionViewArg cellForItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [collectionViewArg dequeueReusableCellWithReuseIdentifier:@"ID" forIndexPath:indexPath]; /* Some code to get blogView */ [cell.contentView addSubview:blogView]; return cell; } 
+4
source share
1 answer

The problem is that the log says that the header cannot be nil.So give valid input there, and you can avoid a crash.

Similarly, if the header section does not require input, give it a view using clearclolor

To implement the header section, you must implement the following data source method

 - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath; 

Happy coding :)

+8
source

All Articles