2009-06-15 47 views
1

我正在執行表的幾行刪除操作。事實上,在這種情況下,所有可見的細胞實際上都被刪除了。如何在刪除行時處理不可見的行。 (UITableViews)

這會導致緊挨着可見框架的單元格在動畫之後變得可見,因爲上面的所有單元格現在都消失了。

這是問題,這個單元格也被刪除。所以我得到以下錯誤,我想,因爲tableview希望我刪除不在屏幕上的單元格。 (但將在動畫期間/之後在屏幕上顯示)。

2009-06-15 17:44:30.114 HSS[18175:20b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 4. The number of rows contained in an existing section after the update (0) must be equal to the number of rows contained in that section before the update (1), plus or minus the number of rows inserted or deleted from that section (0 inserted, 0 deleted).' 
2009-06-15 17:44:30.117 HSS[18175:20b] Stack: (
    807902715, 
    2429263419, 
    807986683, 
    811271572, 
    815059595, 
    815007323, 
    97367, 
    96328, 
    96282, 
    810768858, 
    807687328, 
    807683624, 
    839142449, 
    839142646, 
    814752238, 
    10968, 
    10822 
) 

那麼在這種情況下我該怎麼做?

導致異常的代碼如下所示。請注意,我實際上在另一個方法中創建了一個名爲「filteredTableGroups」的新數組。這是更新的模型。 「allTableGroups」是每個單元控制器。每個單元格控制器都包含一個用於填充單元格數據的字典。我使用一個鍵「filteredDataSet」來確定一個單元格是否應該保留在過濾表格中。在tableview單元格刪除期間,我將tableGroups交換爲指向更新後的模型。 (我創建了類似於使用電池控制器的控制單個細胞的馬特·加拉格爾和Craig Hockenberry的解決方案我的代碼)

- (void)collapseVisableCells{ 

NSMutableArray *cellsToRemove = [NSMutableArray array]; 

for(NSArray *sections in self.allTableGroups){ 

    for(ScheduleCellController *cellController in sections){ 

     NSString *shouldDisplayString = (NSString*)[[cellController model] objectForKey:@"filteredDataSet"]; 

     BOOL shouldDisplay = [shouldDisplayString boolValue]; 

     if(!shouldDisplay){ 

      UITableViewCell *theCell = [cellController myCell]; 

      NSIndexPath *cellPath = [self.tableView indexPathForCell:theCell]; 
      NSLog([cellPath description]); 

      if(cellPath!=nil) 
       [cellsToRemove addObject:cellPath]; 


     } 
    } 

} 



[self.tableView beginUpdates]; 
tableGroups = self.filteredTableGroups; 
[self.tableView deleteRowsAtIndexPaths:cellsToRemove withRowAnimation:UITableViewRowAnimationTop]; 
[self.tableView endUpdates]; 

}

回答

3

我不知道我理解正確的,你的意思,但你可以嘗試以下。

NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet]; 

每次從相關的tableView的特定部分模型陣列中刪除對象,檢查陣列計數爲零,在這種情況下,添加表示部分索引的索引:

[array removeObjectAtIndex:indexPath.row]; 
if(![array count]) 
    [indexes addIndex: indexPath.section]; 

Determine all of the indexPaths related to the rows to be deleted, then update the tableView as follows: 

[tableView beginUpdates]; 
[tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade]; 
[tableView deleteSections:indexes withRowAnimation:UITableViewRowAnimationFade]; 
[tableView endUpdates]; 

讓我知道這是否適合你。

+1

我會嘗試刪除「死區」,看看是否能解決我的問題。這個問題很難解釋。主要的問題是我不能刪除屏幕外的單元格,但是tableview抱怨我沒有刪除一個離屏的單元格。刪除整個部分可能會解決這種情況。但我不會稱這種預期的行爲。 – 2009-06-16 00:17:43

相關問題