1

詳細ビューでアプリケーションのストーリーボードを使用しました。UITableViewテーブルビューを詳細ビューに渡して、この行を削除できるようにしましたが、何かのアクションに依存しますが、以下のエラーが表示されます

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'Invalid update: invalid number of rows in section 0.  
The number of rows contained in an existing section after the update (4) must be equal to the  
number of rows contained in that section before the update (4),
plus or minus the number of rows inserted or deleted from that section (0 inserted, 1 deleted) 
and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).'
4

3 に答える 3

2

テーブルの最後の行を削除すると、UITableView コードは残りの行が 0 であると想定します。UITableViewDataSourceメソッドを呼び出して、残っている数を判断します。「データなし」セルがあるため、0 ではなく 1 を返します。そのため、テーブルの最後の行を削除するときは、呼び出し-insertRowsAtIndexPaths:withRowAnimation:て「データなし」行を挿入してみてください。

あなたがする必要があるのは:

// tell the table view you're going to make an update
[tableView beginUpdates];
// update the data object that is supplying data for this table
// ( the object used by tableView:numberOfRowsInSection: )
[dataArray removeObjectAtIndex:indexPath.row];
// tell the table view to delete the row
[tableView deleteRowsAtIndexPaths:indexPath 
           withRowAnimation:UITableViewRowAnimationRight];
// tell the table view that you're done
[tableView endUpdates];

( このリンクによると、避けるべきNSInternalInconsistencyExceptionです。)

于 2012-12-25T13:28:14.387 に答える
0

ログは、4 ではなく 4-1 = 3 であることを意味します。

カウントを返すときは、削除された行を考慮する必要があります

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

行数を含む変数または配列が必要です。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.cellsCount;
}

// somewhere else

[tableView beginUpdates];
self.cellsCount--; // here is an important line of code
[tableView deleteRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];
于 2012-12-25T14:05:04.070 に答える
0

行を追加または削除するときは、一貫性を保つためにデータソースを更新する必要があります。行を削除した後、データソースが更新されていないようです。あなたを助けるために、データソースメソッドと行を削除するために使用するコードが役に立ちます。

于 2012-12-25T13:27:19.847 に答える