UIAlertView删除核心数据实体

时间:2011-03-23 15:46:10

标签: core-data uialertview

我正在尝试使用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_ACCESS。根据我的研究,在删除对象之前,alertView可能会释放?这是正确的吗?如果是这样,那么如何在删除处理之后保留alertView? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

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

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

EXC_BAD_ACCESS通常来自访问已发布的对象,但这次不是。您可以在显示警报后立即发布警报。