将 NSIndexPath 传递给 alertView clickedButtonAtIndex



>我有一个从CoreData加载数据的UITableView。如果我选择从我使用的表中删除记录:

[self.managedObjectContext deleteObject:[self.recordList objectAtIndex:indexPath.row]];
[self.managedObjectContext save:nil];
[self.tableViewSavedRecords reloadData];

一切都很好 - 记录被删除并重新加载表。

但是,某些记录受密码保护,当选择删除此类记录时,会出现一个警报,要求输入密码:

UIAlertView *alert = [[UIAlertView alloc]initWithTitle: @"Warning" message: @"This record has been password protected.nEnter password." delegate: self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
alert.alertViewStyle = UIAlertViewStyleSecureTextInput;
[alert show];

alertView clickedButtonAtIndex

NSString *enteredPassword = [[alertView textFieldAtIndex:0] text];
if ([enteredPassword isEqualToString: savedPassword]) {
    [self.managedObjectContext deleteObject:[self.recordList objectAtIndex:indexPath.row]];
    [self.managedObjectContext save:nil];
    [self.tableViewSavedRecords reloadData];
}

问题是objectAtIndex:indexPath.row显然在alertView clickedButtonAtIndex部分中没有被识别出来。如何将NSIndexPath传递给alertView clickedButtonAtIndex

我尝试声明:

NSIndexPath *selectedIndexPath;

然后,如果警报被触发,我已经包括:

selectedIndexPath = [tableViewPausedObs indexPathForSelectedRow];

然后在警报视图中单击:

[self.managedObjectContext deleteObject: selectedIndexPath.row];
[self.managedObjectContext save:nil];

但它会删除表的第一行,而不是所选行。

您可以在这样的任何位置获取所选行的 NSIndexPath

NSIndexPath *selectedIndexPath = [tableView indexPathForSelectedRow];

最新更新