2012-01-31 7 views
0

私は自分のセルに2色を付けました。セルを削除中の例外

cell.contentView.backgroundColor = indexPath.row % 2 ? [UIColor whiteColor] : [UIColor blackColor] ;

iが行を削除するとき今、iは黒色を含むセルを削除し、その後、白色を含ん2行が存在することになると言います。だから私は行をリフレッシュしようとした。

[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES];

これは動作しますが、私は次の例外を取得するすべてのレコードを削除すると、どうしてこれなの ?

Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:961 and 

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. Attempt to delete more rows than exist in section.' 

my code;

[self.tableView beginUpdates]; 
[self.myArray removeObjectsInArray:discardedItems ]; 
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES];  
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES]; 
[self.tableView endUpdates]; 

これをどのように解決できますか?

答えて

0

あなたよりも多くの行があると思います。このようなものを試してみてください...

[self.tableView beginUpdates]; 
[self.myArray removeObjectsInArray:discardedItems ]; 
[self.tableView reloadData]; 
[self.tableView endUpdates]; 

テーブルビューのデータデリゲートの性質上、データモデルを変更した後は、残りの部分を実行する必要があります。

0

ここで、配列には各セルのデータソースに対応する6つのオブジェクトがあるとしましょう。したがって、デリゲートメソッドが呼び出され、実際に行を編集して削除することができるので、今度は5つのオブジェクトになります。私が常にやっていることは、まずデータソースで配列をサイズ変更してから、ビューを更新することです。

//Remove the data  
[self.myArray removeObjectsInArray:discardedItems ]; 
//Update the view 
[self.tableView beginUpdates]; 
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES];  
[self.tableView endUpdates]; 

あなたは、データ・ソースの一部が変更され、あなたはおそらく、updateメソッドを呼び出すべきではないことを意味し、データを再ロードする必要がない限り。あなたがUITableViewの更新を完了する前に、配列の6番目の要素から情報を取得しようとしていたため、例外が来ている可能性があります。

これがうまくいきます。

関連する問題