私はUITableView
のアプリケーションを持っています。アプリケーションはサーバーと通信します。TableView: 'NSInternalInconsistencyException'を捕まえた後に進める方法?
クライアント1は、テーブルビューのセルを削除します。
問題は次のとおりです。データ更新は、クライアント2にデータ更新を送信するサーバに送信される。同時に、クライアント2は、TableViewからセルを削除する。受信中の更新のために、前と後のセル数が期待通りでないために差異が2でないため、NSInternalInconsistencyException
がスローされます。
アプリがクラッシュもちろん
[tableView endUpdates];
に私は
- (void) tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
@try{
// Send data update to the server
[sender sendDataToServer:data];
// Update tableview
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationFade];
[tableView endUpdates];
}
@catch (NSException * e) {
// Hide red delete-cell-button
tableView.editing = NO;
// Jump to previous ViewController
[self.navigationController popViewControllerAnimated:YES];
}
}
}
で例外をキャッチすることができます。しかし成功したキャッチした後、私は[_UITableViewUpdateSupportのdeallocで
EXC_BAD_ACCESSの例外を取得します]。
アプリがクラッシュするのを防ぐにはどうすればよいですか?状況を「きれいにする」ためにキャッチブロックで何をしなければならないのですか?テーブルビューを再読み込みしても効果はありません。
EDIT:numberOfRows-方法は次のようになります。
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [dataSourceArray count];
}
あなたは*「クリーン」ではありません - あなたは***防止する必要があります***!この種の例外を発生させることができないようにコードを記述します。 – luk2302
@Farleyあなたの 'numberOfRowsInSection'メソッドを書きます –
あなたの配列からこのオブジェクトを削除しますか? – Lion