pa12
pa12

Reputation: 1503

Collectionview performBatchUpdates crash

I am trying to add new items to my collection view using insertItemsAtIndexPaths. My app crashes at performBatchupdate

- (void) addItems {
    NSArray *newProducts = @[@"1",@"2",@"3",@"4"];
    [self.collectionView performBatchUpdates:^{
        NSMutableArray *arrayWithIndexPaths = [NSMutableArray array];
        for (NSInteger index = self.array.count; index < (self.array.count + newProducts.count); index++) {
            [arrayWithIndexPaths addObject:[NSIndexPath indexPathForRow:index inSection:0]];
        }
        [self.array addObjectsFromArray:newProducts];
        [self.collectionView insertItemsAtIndexPaths:arrayWithIndexPaths];
    }
                                  completion:nil];
}

Following is the crash log:

* Assertion failure in -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:]

This Assertion happens when cell is not registered with the collectionview. I am registering my cell.

Upvotes: 3

Views: 7073

Answers (1)

pa12
pa12

Reputation: 1503

This worked for me: If Collection view is empty reload else insertItems.

- (void)addItems {

    NSArray *newProducts = @[@"1",@"2",@"3",@"4"];
    NSMutableArray *arrayWithIndexPaths = [NSMutableArray array];

    for (NSInteger index = self.array.count; index < (self.array.count + newProducts.count); index++) {
        [arrayWithIndexPaths addObject:[NSIndexPath indexPathForRow:index inSection:0]];
    }

    if (self.array) {
        [self.array addObjectsFromArray:newProducts];
        [self.collectionView performBatchUpdates:^{
            [self.collectionView insertItemsAtIndexPaths:arrayWithIndexPaths];
        }
                                      completion:nil];
    }
    else {
        self.array = [[NSMutableArray alloc] initWithArray:newProducts];
        [self.collectionView reloadData];

    }
}

Upvotes: 1

Related Questions