2014-12-05 54 views
0

我在我的應用程序中實現了UICollectionView,並且當我從UICollectionView中取消選擇圖像時,我將從NSMutableArray中刪除UIImage。現在我的問題是,如果圖像超過兩個,我取消選擇那些圖像,那麼我的應用程序崩潰。iPhone應用程序在UICollectionView的didDeselectItemAtIndexPath中崩潰

並得到誤差是

終止應用程序由於未捕獲的異常 'NSRangeException',原因: '*** - [__ NSArrayM removeObjectAtIndex:]:索引2超出範圍[0..1]'

這裏是我的代碼如下

- (void)collectionView:(UICollectionView *)collectionView 
     didDeselectItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [selectedImagesArray removeObjectAtIndex:indexPath.row]; 
} 

我得到indexPath這超出了該數組。

+0

以及didSelect上正在做什麼? – gronzzz 2014-12-05 12:11:03

回答

-1

加入這行代碼來處理一個檢查:

if ([indexPath.row] < [selectedImagesArray count]) { 

    [selectedImagesArray removeObjectAtIndex:indexPath.row]; 
} 
0

IndexPath不一定行屬性,所以這可能是零。如果是零,你會看到一個崩潰

0

檢查數組計數大於indexPath.row性能更高,然後刪除或檢查數組元素爲索引中存在,如果是,那麼刪除的元素

if(selectedImageArray[indexPath.row] != nil) { 
    [selectedImagesArray removeObjectAtIndex:indexPath.row]; 
} 
0

Indexpath.row會返回你的實際數組索引,而不是選擇數組索引。 因此,您必須在SelectedArray中找到相同的元素,然後才能從選定數組中刪除該圖像。

對於實施例

實際對象Array

[1,2,3,4,5,6,7,8,9,10]

從已選擇對象

[1,5,7]

所以對象[1,5,7]將處於選擇狀態和SelectedArray也。

,當你在那個時候Indexpath.row選擇對象7將返回6

你是直接從SelectedArray所以你得到這個錯誤是無法刪除索引6

0

你必須使用indexPath.item。 這是在一個collectionView中正常使用的。 IndexPath.row用於TableView。

不管怎麼說,放一個if條件來檢查這個索引是否存在。