我已在我的应用程序中实施UICollectionView
,当我从UICollectionView
取消选择图片时,我将从UIImage
删除NSMutableArray
。现在我的问题是,如果图像超过两个并且我取消选择那些图像,那么我的应用程序就会崩溃。
并且收到错误
由于未捕获的异常终止应用' NSRangeException',原因:' *** - [__ NSArrayM removeObjectAtIndex:]:索引2超出边界[0 .. 1]'
以下是我的代码
- (void)collectionView:(UICollectionView *)collectionView
didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
[selectedImagesArray removeObjectAtIndex:indexPath.row];
}
我得到的indexPath
超出了那个数组。
答案 0 :(得分:0)
IndexPath
不一定有行属性,因此可能为零。如果它是零,你会看到崩溃
答案 1 :(得分:0)
检查数组计数是否大于indexPath.row属性,然后删除或检查该索引是否存在数组元素,如果是,则删除元素
if(selectedImageArray[indexPath.row] != nil) {
[selectedImagesArray removeObjectAtIndex:indexPath.row];
}
答案 2 :(得分:0)
Indexpath.row
将返回实际数组的索引而非选定的数组索引。
因此,您必须在SelectedArray
中找到相同的元素,然后您才能从所选数组中删除该图像。
例如
实际数组对象
[1,2,3,4,5,6,7,8,9,10]
由此您选择了对象
[1,5,7]
所以对象[1,5,7]
将处于选定状态,也会处于SelectedArray
。
当您选择对象7
时Indexpath.row
将返回6
您正在直接删除6
中的索引SelectedArray
,该索引不可用,因此您收到此错误。
答案 3 :(得分:0)
您必须使用indexPath.item。 这通常用于collectionView。 IndexPath.row用于TableView。
无论如何,在它周围放置一个if条件来检查这个索引是否存在。
答案 4 :(得分:-1)
添加以下代码来处理支票:
if ([indexPath.row] < [selectedImagesArray count]) {
[selectedImagesArray removeObjectAtIndex:indexPath.row];
}