>我有一个从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];