2009-06-15 16 views
1

テーブルのいくつかの行を削除しています。実際、この機会にすべての目に見える細胞は実際には削除されています。行の削除中に非表示の行を処理する方法。 (UITableViews)

これにより、アニメーションの後に表示されるフレームのすぐ下にあるセルが、その上にあるすべてのセルが消えたために表示されます。

問題がありますが、このセルも削除されています。だから私は、次のエラーが発生すると仮定します。なぜなら、テーブルビューは私が画面上にないセルを削除したいからです。 (ただし、アニメーション中/アニメーション後の画面に表示されます)。

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"を使用して、セルがフィルタリングされたテーブルに残るかどうかを判断します。テーブルビューのセルの削除中に、私は更新されたモデルを指すようにテーブルグループをスワップします。

- (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

私はあなたが何を意味するかを正しく理解していることを確認していない、しかし、あなたがすることができます(私は、Cellコントローラの個々のセルを制御するために使用してのマット・ギャラガーとクレイグHockenberryがのソリューションに似た私のコードを作成しています)以下を試してください。

[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]; 
:配列のカウントがゼロの場合

NSMutableIndexSet *indexes = [NSMutableIndexSet indexSet]; 

あなたがのtableViewの特定のセクションに関連したモデル配列からオブジェクトを削除するたびに、その場合には、インデックスにセクションを表す指標を追加し、確認してください

これはあなたのために私に教えてください。

+1

私は "デッドセクション"を削除しようとし、私の問題を解決するかどうかを確認します。問題を説明するのは難しいです。主な問題は、画面外のセルを削除できないことですが、テーブルビューではオフスクリーンのセルを削除しなかったという不満があります。セクション全体を削除すると、この状況を改善することができます。しかし、私はこの期待される行動を呼ぶつもりはない。 –

+0

これは機能しました。空のセクションを削除することで、私はこの問題を回避することができました。空のセクションを表示する必要はありません。削除するセクションを追跡するのはやや面倒でしたが、うまくいきました。ありがとう。 –

関連する問題