iPhoneのTableView のセルを削除するときにはまったところ


iPhoneのTableViewでセル削除を行わせたいとき、以下のような画面を表示して行う。

holidaystableview

これを行うためにテーブルビューコントローラーはUITableViewDelegateプロトコルとUITableViewDataSourceプロトコルを実装してcommitEditingStyleメソッドを実装する必要がある。

@interface HogeTableViewController : UITableViewController &gtUITableViewDelegate ,UITableViewDataSource< {
    NSMutableArray *array
}
@end

@implementation HogeTableViewController
...
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
    [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]  withRowAnimation:UITableViewRowAnimationFade];
    // Delete the row from the data source
    NSInteger row = [indexPath row];
    [self.array removeObjectAtIndex: row];
    }
}
@end

(EditModeに変更するコードは省略)

テーブルビュー上でセルを削除すると上のcommitEditingStyleが呼ばれる。
しかし、上のコードではdeleteRowsAtIndexPathsメソッドを呼んだ時点でエラーになってしまう。
どうやらテーブルビューはデータソースの状態をモニターしているらしく、上のコードで言うとarray変数の要素数とテーブルビューのセル数が違っているとエラーではねる仕様になっているらしい。
データソースはおそらくヘッダーファイルで一番最初に宣言されている配列をデータソースとしているのではないかと思われる。
従って、以下のようにデータソースの要素を削除してからテーブルビューのセルを削除すると正常に終了する。

少し気持ち悪い仕様だが、iPhoneでソフトウェアを作るかぎりでは仕方ないのだろう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です