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);
}