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

Respuestas a la pregunta(1)

Su respuesta a la pregunta