1

ユーザーが行を削除できるようUITableViewControllerに設定しました。これは、削除アクションのハンドラーのコードであり、UIAlertView:のデリゲートメソッドです。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"t" message:@"del?" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Delete", nil];
        [alert show];
    }
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSIndexPath *path = [self.tableView indexPathForSelectedRow];
    if (buttonIndex != [alertView cancelButtonIndex]) {
        //my code to delete from the data source is here. it works fine.
        [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:path] withRowAnimation:UITableViewRowAnimationFade];
    }
}

問題は、実際に行をから削除することになっている最後の行にありtableViewます。それ(およびデータソースから削除するコード)を最初のメソッドに入れると、UIAlertView問題なく動作します。

これを行う適切な方法は何ですか?

4

1 に答える 1

1

問題は、UIIndexPathそのメソッド内でオブジェクトが間違っていたことです。アラートビューが表示されているときに行が選択されていないためだと思います。そのため、コードを実行する前にビューコントローラクラスのプロパティに保存し、UIAlertView後で2番目のメソッドで取得しましたが、正常に機能します。

于 2012-04-20T21:29:23.120 に答える