2014-03-19 72 views
0

UICollectionViewController這是刪除代碼。UICollectionView項目刪除引發異常

- (IBAction)tapRead:(id)sender 
{ 
    if (self.editing) 
    { 
     BookCell *cell = (BookCell*)[[sender superview] superview]; 
     NSArray *arr = [NSArray arrayWithObjects:cell.ipath, nil]; 

     _totalCount--; 
     NSLog(@"total: %d", _totalCount); 

     [self.collectionView deleteItemsAtIndexPaths:arr]; 
    } 
} 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
{ 
    return _totalCount; 
} 

- (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath; { 
    BookCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"BookCell" forIndexPath:indexPath]; 
    cell.ipath = indexPath; 

    if (self.editing) { 
     [cell engageEditMode]; 
    } 
    else 
    { 
     [cell exitEditMode]; 
    } 

    return cell; 
} 

現在當我總是從最後刪除項目,它工作得很好。然而,當我刪除一些從一開始,有的從中間,在某些時候我有一個例外,當我嘗試刪除最後一個元素:

'NSInternalInconsistencyException', reason: 'attempt to delete item 24 from section 0 which only contains 20 items before the update' 

我不知道如何調試這...

+0

我的猜測是,你沒有刪除從array.Please對象從陣列中刪除該對象並重新加載集合視圖 – vin

+0

@vin看到我的回答,擺出相同。 –

回答

0

我認爲這個問題和從UITableView中刪除一個項目而不更新數據源,從而導致異常時出現的問題是一樣的。請嘗試以下操作:

[self.datasource removeObjectAtIndex:iPath.row]; 
//... delete the row from the collectionView. 
+0

現在我沒有自己的數據源。只需使用_totalCount來模擬它。 – Pablo

+0

@Pablo,我明白了。你有沒有試過NSLogging的indexPath,以確保它是正確的,並引用你想刪除的行的indexPath? –

+0

問題可能在這裏:'cell.ipath = indexPath'。我認爲這是完全錯誤的方式來設置每個單元格的索引路徑,並且在刪除期間它將覆蓋正確的索引路徑。必須有更好的方式知道哪個單元格按鈕按下指向... – Pablo