在事件tableView:commitEditingStyle:forRowAtIndexPath中删除NSManageObject:

时间:2010-05-05 04:53:24

标签: iphone

当我尝试在tableView:commitEditingStyle:forRowAtIndexPath:中删除一个NSManageObject时出现异常。这是我的代码的一部分:

- (void)tableView:(..)tableView commitEditingStyle:(..)editingStyle 
  forRowAtIndexPath:(..)indexPath {
  if (editingStyle == UITableViewCellEditingStyleDelete) {
    [managedObjectContext deleteObject:
      [fetchedResultController objectAtIndexPath:indexPath]];
     ...
  }
}

在deleteObject :(我的本地NSManagedObjectContext的方法)行抛出了异常。这是异常消息:

未捕获的异常'NSObjectInaccessibleException',原因:'具有ID的NSManagedObject:0x3d07a30< x-coredata:// 0D2CC9CB-042B-496D-B3FE-5F1ED64EAB97 / paymentType / p2>已失效。'

我试图首先获取实体对象,然后删除它。该实体看起来没问题,但仍然是删除时的例外:

 NSManagedObject *entityToDelete = 
    [fetchedResultsController objectAtIndexPath:indexPath];
 [mangedObjectContext deleteObject:entityToDelete]; // Exception again.

我不确定是否无法删除从fetchedResultsController(NSFetchedResultsController类型)检索的实体对象?如果是这样,是否还有其他方法可以将实体对象删除?

我发现在Apple's Core Data Tutorial for iPhone with events example中,NSArray上有事件实体对象。我不确定是否有必要使用NSArray来保存我的本地实体对象然后用它来删除?

1 个答案:

答案 0 :(得分:0)

我想我发现了无法从NSManagedObjectContext中删除实体对象的原因。它是我的UITableViewController类中的invalide NSManagedObjectContext对象。简而言之,我错过了在属性getter中保留上下文对象。我的问题中的代码很好。当获取的结果控制器和上下文对象正常时,删除工作。