我注意到performBatchUpdates:completion:UICollectionView方法在iOS7(严重-崩溃)和iOS8(良好)中的工作方式存在奇怪的区别。这是我使用的代码:

[self.swapItems removeObject:self.swapItems[indexPath.row]];

[self.swapItemsGrid performBatchUpdates:^{
    [self.swapItemsGrid deleteItemsAtIndexPaths:@[indexPath]];
} completion:^(BOOL finished) {
    [self layoutViews];
}];

在iOS8中工作正常,而在iOS7中崩溃,并显示以下错误:
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

少量调试显示,在iOS8中performBatchUpdates:completion:方法调用数据源方法collectionView:numberOfItemsInSection:,而在iOS7中则没有,因此尝试使用数据数组no中的对象的数据创建单元格时出错更多。

还有其他人遇到这个问题吗?也许您有解决方案?

最佳答案

self.swapItemsGrid的索引indexPath可能没有项目。
为了避免这种情况,请使用此方法检查数组中的indexPath出口是否存在:

-(BOOL)checkIndexPathExits:(NSIndexPath*)indexPath inArray:(NSArray*)array{
    if (indexPath.section < array.count) {
        if (indexPath.row < [array[indexPath.section] count]) {
            return YES;
        }
    }
    return NO;
}

希望这会有所帮助。

关于ios - UICollectionView的performBatchUpdates使iOS7崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31535698/

10-13 04:17