删除集合视图单元时应用程序崩溃

时间:2015-09-20 10:36:14

标签: ios objective-c uicollectionview nsindexpath

我启用了多选集合视图。(Xcode 7,iOS 9)

 NSArray *paths = [self.collectionView indexPathsForSelectedItems];

// data source
 for (NSIndexPath *path in paths) {
   [datasourceArray removeObjectAtIndex:path.item];
  }

// delete 
 [self.collectionView deleteItemsAtIndexPaths:paths];

我有9件物品。它崩溃了这条消息:

  

原因:' *** - [__ NSArrayM removeObjectAtIndex:]:索引8超出界限[0 .. 7]'

但如果你只删除最后一个(8),它可以正常工作。 enter image description here

1 个答案:

答案 0 :(得分:1)

想想删除元素时数组会发生什么 - 上面的所有元素都会向下移动1,因此元素8现在是元素7,元素7现在是元素6,依此类推。因此,当您删除元素6时,不再有元素9,因此您将获得越界异常。

您可以使用removeObjectAtIndex方法 -

而不是在循环中调用removeObjectsAtIndexes:
NSArray *paths = [self.collectionView indexPathsForSelectedItems];

NSMutableIndexSet removeIndexes=[NSMutableIndexSet new];

for (NSIndexPath *path in paths) {
    [removeIndexes addIndex:path.item];
}

// delete 
[datasourceArray removeObjectAtIndexes:removeIndexes];
[self.collectionView deleteItemsAtIndexPaths:paths];
相关问题