如何安全地删除未保存的托管对象?

Posted

技术标签:

【中文标题】如何安全地删除未保存的托管对象?【英文标题】:How to delete an unsaved managed object safely? 【发布时间】:2011-09-14 05:24:38 【问题描述】:

我的应用为“文本文章”提供了某种编辑器功能。我的编辑器有两种模式。当编辑器加载时,如果它没有通过初始化程序传入,我会创建一个托管对象。当用户取消新的编辑时,我会从上下文中删除该对象。但是,有时,我收到关于对象未插入上下文的错误,有时我没有。那么,下面的代码是检查托管对象实例是否插入上下文的好方法吗?

if ([[self.workingManagedObjectInstance managedObjectContext] isEqual:self.managedObjectContext])


我的理论是,如果[self.workingManagedObjectInstance managedObjectContext]nil,那么它还没有被插入并且不会是“isEqual”。这是检查我们没有删除尚未插入的对象的有效方法吗?

【问题讨论】:

【参考方案1】:

如果可能,应该始终使用相同的托管对象上下文,而不是它的各种实例。如果您有多个视图控制器,则应传递相同的上下文作为引用。比较上下文并不能告诉您有关实体实例是否存在的任何信息。

以通常的方式初始化对象后

myEntity = [NSEntityDescription insertNewObjectForEntityForName:@"Entity" 
   inManagedObjectContext:self.managedObjectContext];

你可以检查它是否存在并用一个简单的删除它

if (myEntity)  
   [self.managedObjectContext deleteObject:myEntity];

【讨论】:

【参考方案2】:

就我而言,我意识到我应该在创建托管对象的初始实例后保存我的上下文。由于我仍然有它的引用,所以我可以稍后将其删除。

【讨论】:

以上是关于如何安全地删除未保存的托管对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 managedObjectContext 中删除未保存的对象

在后台线程上安全保存 Core Data 托管对象上下文的正确方法?

如何在通过 Core Data 保存我的 RestKit 托管对象之前对其进行修改?

托管对象上下文不会保存——没有错误

更改未保存在核心数据模型中(例如删除对象)

Firefox CSSCoverage 工具 - 保存使用的 CSS