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]; [cell.contentView addSubview:blogView]; return cell; }
source share