NSRangeException al eliminar la última UICollectionViewCell
Tengo un UICollectionView con 1 sección. El usuario puede eliminar celdas de la colección, y uso este código para eliminarlo:
[self.collectionView performBatchUpdates:^{
[self.collectionView deleteItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:i inSection:0]]];
[self.media removeObjectAtIndex:i];
} completion:nil];
Esto funciona bien para cada celda, excepto para la última celda de la colección, que bloquea la aplicación cada vez que aparece el error:Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 2]
NSZombies no me muestra un seguimiento de la pila, por lo que puse un punto de interrupción en cada línea de mi código que accede a una matriz, pero ninguna fue golpeada, y descubrí que este error se produce despuésdeleteItemsAtIndexPaths
, numberOfSectionsInCollectionView
ysizeForItemAtIndexPath
, pero antesnumberOfItemsInSection
ycellForItemAtIndexPath
¿Qué podría estar causando este choque? ¿Cómo puedo depurarlo?
Hay algunas publicaciones SO similares, pero esta de hace 2 años no tiene respuestaUICollectionView se bloquea al eliminar el último elemento, y este solo resuelve el problema si desea eliminar toda la sección:Al eliminar la última celda en UICollectionView se produce un bloqueo
ACTUALIZACIÓN, estos son los métodos de delegado de origen de datos que se ejecutan antes del bloqueo:
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return CGSizeMake(floorf(screenWidth/3), 200);
}