核心数据 - 如何初始化对象但不将其添加到持久存储?

Posted

技术标签:

【中文标题】核心数据 - 如何初始化对象但不将其添加到持久存储?【英文标题】:Core data - How to initialise an object but not add it to the persistent store? 【发布时间】:2017-02-15 14:25:14 【问题描述】:

我想初始化一个对象并填充它,但不将它添加到持久存储中。我想让一个用户在表单上,​​并将数据添加到托管对象的字段中,但只有在用户按下保存按钮后才保存。

如果相关,我正在使用 AERecord coreData 包装器

【问题讨论】:

在 managedObjectContext 中创建对象时不要在 managedObjectContext 上调用 save 吗?在您的情况下,不要调用 AERecord.save() 【参考方案1】:

如果用户取消,只需从托管对象上下文中删除对象,如下所示:

[object deleteInContext:managedObjectContext];

请参考link

【讨论】:

【参考方案2】:

只是不要告诉它在创建它时使用什么上下文。例如,指定的初始化程序是init(entity:insertInto:),但第二个参数是可选的。零通过。稍后,您可以使用insert(_:) 方法将其添加到托管对象上下文中。

【讨论】:

developer.apple.com/reference/coredata/nsmanagedobject/… - 如果 context 不为零,则此方法调用 [context insertObject:self](这会导致调用 awakeFromInsert())。换句话说,按照您的建议进行操作不会调用 awakeFromInsert 并且 OP 必须手动设置默认值。此外,如果他有关系,这些关系将不会建立。但是,避免在 NSManagedObjectContext 上调用 save ,不会按照他的要求保存对象并将其推送到 PersistentStore ,但仍会为他提供一个有效的对象以方便使用 并且您的方法在知道实际需要该对象之前将一个对象插入到上下文中,可能会建立关系。如果不需要,它还需要删除对象的额外步骤——否则他永远不能再次保存上下文以避免保存不需要的对象。这两种方法都有并发症。 我们不要把事情复杂化,这是一个简单的删除,仅此而已。 CoreData 将在百万分之一秒内为您处理所有关系和其他一切。如果我必须在避免调用 awakeFromInsert() 和不获取 NSManagedObject 和所有其他机构上的所有默认值甚至尚未将其插入 NSManagedObjectContext 之间做出选择(这是一个巨大的步骤和并发症),与在取消和取消时简单地调用基本 deleteObject 相比,我会选择后者。但我想你的答案是一个有效的选择。

以上是关于核心数据 - 如何初始化对象但不将其添加到持久存储?的主要内容,如果未能解决你的问题,请参考以下文章

ios核心数据:如何更改NSManagedObject而不将其保存到上下文中

核心数据:无法将持久存储添加到协调器

为 NSManagedObject 创建实例但不将其保存到上下文中

我如何使用httplib2上传图像,但不将其保存到计算机上?

如何访问对象而不将其作为参数传递?

如何计算GeoJSON的边界而不将其添加到地图中