私は、ドメインオブジェクトに基づいて、私のテーブルビューから行を削除する方法を実現していますが、私は、コールdeleteRowsAtIndexPath後にエラーを取得しています:キャッチされない例外が原因アニメーションUITableView deleteRowsAtIndexPathモデルの更新時期は?
BLOCKQUOTE終端アプリ「NSInternalInconsistencyException」、理由: '無効な更新:セクション0の行数が無効です。更新(2)後の既存のセクションに含まれる行の数は、更新前のそのセクションに含まれる行の数(2)に等しいか、そのセクションから挿入または削除された行の数(挿入された0、削除された1)。
私は「ok、私はモデルをあまりにも早く更新している」と思った。コード:
- (void)deleteItem:(Item *)item {
NSInteger index = [items indexOfObject:item]; // items is the model a NSArray
if (index != NSNotFound) {
NSMutableArray *itemEditable = [items mutableCopy];
[itemEditable removeObjectAtIndex:index];
self.items = itemEditable;
NSIndexPath *indexToDelete = [NSIndexPath indexPathForRow:index inSection:0];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexToDelete] withRowAnimation:UITableViewRowAnimationMiddle];
}
}
そして私は私がdeleteRowsAtIndexPath呼び出す後のモデル更新するためのコードを変更:
- (void)deleteItem:(Item *)item {
NSInteger index = [items indexOfObject:item]; // items is the model a NSArray
if (index != NSNotFound) {
NSIndexPath *indexToDelete = [NSIndexPath indexPathForRow:index inSection:0];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexToDelete] withRowAnimation:UITableViewRowAnimationMiddle];
NSMutableArray *itemEditable = [items mutableCopy];
[itemEditable removeObjectAtIndex:index];
self.items = itemEditable;
}
}
をアニメーションしかし、それは解決しなかった、変更する唯一のものは数字をキャッチされない例外により「NSInternalInconsistencyException」2〜3
BLOCKQUOTE終端アプリケーションへのエラーメッセージの行、理由:「無効な更新:無効な数update(3)の後の既存のセクションに含まれる行の数は、update(3)の前にそのセクションに含まれる行の数にプラスまたはマイナスの挿入または削除された行の数と等しくなければなりません(挿入された0、削除された1)。
ここでモデルを更新する必要がありますか?
追加numberOfRowsInSection方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [items count];
}
モデルはdeleteRowsAtIndexPathの前に更新する必要があります。 numberOfRowsInSectionメソッドを投稿できますか? – Anna
もちろん、できました。 –