我有一个带有1节的UICollectionView。用户可以从集合中删除单元格,并使用此代码进行删除:
[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
之后抛出了这个错误,{{1 }和numberOfSectionsInCollectionView
,但在sizeForItemAtIndexPath
和numberOfItemsInSection
可能导致此次崩溃的原因是什么?我该如何调试呢?
有一些类似的SO帖子,但是2年前的这个帖子没有答案UICollectionView crash when deleting last item,如果你想要删除整个部分,这个只能解决问题:Removing the last Cell in UICollectionView makes a Crash
UPDATE,这是在崩溃之前运行的数据源委托方法:
cellForItemAtIndexPath