删除最后一个UICollectionViewCell时出现NSRangeException

我有一个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没有显示我的堆栈跟踪,所以我在我的代码中访问数组,但没有被命中的每一行上放置一个断点,我发现这个错误是在deleteItemsAtIndexPathsnumberOfSectionsInCollectionViewsizeForItemAtIndexPath ,但在numberOfItemsInSectioncellForItemAtIndexPath

什么可能导致这次崩溃? 我怎样才能debugging它?

有一些类似的SOpost,但这个从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); } 

只要把exception断点,你会发现它崩溃的地方。

在这里输入图像说明