NSRangeException при удалении последнего UICollectionViewCell

У меня есть UICollectionView с 1 ​​разделом. Пользователь может удалить ячейки из коллекции, и я использую этот код для удаления:

[self.collectionView performBatchUpdates:^{
   [self.collectionView deleteItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:i inSection:0]]];
   [self.media removeObjectAtIndex:i];
} completion:nil];

Это прекрасно работает для каждой ячейки, кроме последней ячейки в коллекции, которая каждый раз вылетает из приложения с ошибкой:Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 2]

NSZombies не показывают мне трассировку стека, поэтому я поставил точку останова на каждую строку в моем коде, которая обращается к массиву, но ни одна не была нажата, и я обнаружил, что эта ошибка возникает послеdeleteItemsAtIndexPaths, numberOfSectionsInCollectionView а такжеsizeForItemAtIndexPath, но преждеnumberOfItemsInSection а такжеcellForItemAtIndexPath

Что может быть причиной этой аварии? Как я могу отладить это?

Есть несколько похожих сообщений SO, но этот от 2 лет назад не имеет ответаСбой UICollectionView при удалении последнего элемента, и эта проблема решает только если вы хотите удалить весь раздел:Удаление последней ячейки в UICollectionView приводит к сбою

ОБНОВЛЕНИЕ, вот методы делегата источника данных, которые выполняются перед сбоем:

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return 1;
}
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return CGSizeMake(floorf(screenWidth/3), 200);
}