2

我注意到iOS7(坏 - 崩溃)和 iOS8(好)performBatchUpdates:completion:的工作方法有一个奇怪的区别。UICollectionView这是我使用的代码:

[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 中则没有,因此尝试使用数据数组中的对象的数据创建单元格的错误不再存在。

有没有其他人遇到过这个问题?也许你有一个解决方案?

4

1 回答 1

0

self.swapItemsGrid可能在 index 处没有项目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;
}

希望这会有所帮助。

于 2015-07-21T10:12:07.923 回答