删除最后一个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没有显示我的堆栈跟踪,所以我在我的代码中访问数组,但没有被命中的每一行上放置一个断点,我发现这个错误是在deleteItemsAtIndexPaths
, numberOfSectionsInCollectionView
和sizeForItemAtIndexPath
,但在numberOfItemsInSection
和cellForItemAtIndexPath
什么可能导致这次崩溃? 我怎样才能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断点,你会发现它崩溃的地方。