无法删除其他上下文中的对象

Posted

技术标签:

【中文标题】无法删除其他上下文中的对象【英文标题】:Cannot delete objects in other context 【发布时间】:2014-08-08 08:04:10 【问题描述】:

我一直面临这个问题超过 3 个月。我搜索了很多并阅读了相关文档并访问了许多论坛,但找不到有效的解决方案。删除对象时出现典型的 NSManagedObject 错误。 NSManagedObjectContext 不能删除其他上下文中的对象。

我试图四处走动并尝试使用其 NSManagedObject ID 删除对象,但无济于事。

  NSManagedObjectID *findingsSurveyDataItemApiId = [findingsSurveyDataItemApi objectID];
            [self.managedObjectContext deleteObject:[self.managedObjectContext objectWithID:findingsSurveyDataItemApiId]];

谁能说出为什么上述解决方案仍然不起作用?

PS:我在应用中有两个托管对象上下文。

【问题讨论】:

【参考方案1】:

我猜这可能是来自 Core Data 的误导性错误消息。如果要删除的对象尚未保存到持久化存储中,objectWithID 将不会返回有效对象,根据docs:

假定由 objectID 表示的持久存储中的数据存在 - 如果不存在,则返回的对象在您访问任何属性时(即触发故障时)抛出异常。

改用existingObjectWithID:error: 并在尝试删除它之前检查它是否返回一个非零对象。

【讨论】:

听起来很有说服力,可以试一试,检查临时 id BOOL isTemporary = [[managedObject objectID] isTemporaryID];

以上是关于无法删除其他上下文中的对象的主要内容,如果未能解决你的问题,请参考以下文章