我设置了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
的东西中,它可以正常工作。
这样做的正确方法是什么?
答案 0 :(得分:1)
问题是UIIndexPath
对象在该方法中是错误的!我想这是因为在显示警报视图时没有选择任何行。因此,我在将UIAlertView
代码放入视图控制器类的属性之前保存它,稍后在第二种方法中检索它,它工作正常。