Core data UIAlertView以删除核心数据实体

Core data UIAlertView以删除核心数据实体,core-data,uialertview,Core Data,Uialertview,我正在尝试使用alertView警告用户他们将要删除对象。这是我的密码: - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { if (editingStyle == UITableViewCellEditingStyleDelete) { U

我正在尝试使用alertView警告用户他们将要删除对象。这是我的密码:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

if (editingStyle == UITableViewCellEditingStyleDelete) {

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Caution!"
                                                    message:@"Are you sure you want to delete this truck?"
                                                   delegate:self
                                          cancelButtonTitle:@"NO"
                                          otherButtonTitles:@"YES", nil];
    [alert show];
    [alert release];
}   }

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
    if (buttonIndex == 1) {
    NSIndexPath *indexPath = [truckTableView indexPathForSelectedRow];
    NSManagedObjectContext *moc = [self.fetchedResultsController managedObjectContext];
    Truck *truck = [fetchedResultsController objectAtIndexPath:indexPath];

    [moc deleteObject:truck];

    NSError *error = nil;
    if (![moc save:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
}
else    {
}}    
如果我点击“否”,警报视图将正确显示,并且会消失,一切正常。如果我点击“是”,应用程序将崩溃,没有日志报告,只有EXC_BAD_访问。根据我的研究,有可能alertView是在删除对象之前发布的?是这样吗?如果是这样,那么如何在删除操作完成之前保留alertView?
谢谢你的帮助

这很可能是因为
[truckTableView indexPathForSelectedRow]
为零。正因为如此,卡车也将是零。当您尝试删除“nil对象”时,
deleteObject:
将引发异常

应该将要删除的单元格的indexPath保存为实例变量


通常,
EXC\u BAD\u访问
来自访问已发布的对象,但这次不是。显示警报后,可以发布警报。

谢谢@fluchtpunkt。我不确定我是否遵循“将单元格的indexath保存为ivar”。在我尝试实现alertView之前,为什么删除代码可以正常工作?如果没有此警报,您是否也使用了
[truckTableView indexPathForSelectedRow]
?只有在删除前选择了完全相同的单元格时,才可以使用
indexPathForSelectedRow
进行删除。这可能是因为在显示警报视图时,表格视图失去焦点时,该行未被选中。我会在调试器的第[NSIndexPath*indexPath=[truckTableView indexPathForSelectedRow]]行设置一个断点;要查看此变量是否为零。否,在尝试alertView之前,我没有使用
indexPathForSelectedRow
。因此,我需要在调用alertView时“抓取”selectedRow的对象?在tableView:CommittedItingStyle:forRowAtIndexPath中:您可以保存作为参数传递的indexPath,或者保存相应的对象,然后在删除它时使用它。