CoreData - 创建新实体 - 为啥不需要保存它?

Posted

技术标签:

【中文标题】CoreData - 创建新实体 - 为啥不需要保存它?【英文标题】:CoreData - creating new entity - Why don't you need to save this?CoreData - 创建新实体 - 为什么不需要保存它? 【发布时间】:2016-09-09 09:53:09 【问题描述】:

我认为您可以像这样创建新实体(在 swift 3 中):

let person = Person(context: persistentContainer.viewContext) person.name = "Some Name"

好像是这样。它永久保存了新人(至少我认为是这样)。

您为什么不需要致电saveContext()of AppDelegate。 swift(或者persistentContainer.viewContext.save(),基本一样吧?)?

每次更改一些entity,都需要保存。为什么在创建新的entities 时不是这种情况?

提前致谢!!!

【问题讨论】:

你是如何测试你不需要保存的? 我正在使用“Core data by tutorials”一书。在一章中,情况正是如此。另外,我通过杀死应用程序并重新启动它来测试它(我确实确保在应用程序启动时并不总是插入数据) 【参考方案1】:

根据您的问题,您正在致电saveContext()

进入您的AppDelegate 并查看applicationWillTerminatesaveContext() 在那里被调用。

简而言之,如果你想持久化数据那么是的,你需要调用saveContext()

【讨论】:

啊,这很有道理。在书中,它说它会在创建新条目后立即保存。这有点误导。 它会立即存储在上下文中,但在保存之前不会持久化。此外,如果您有一个 ManagedObjectContext 是主上下文的子级,那么当您保存子级时,它将被保存到主上下文中。但在您保存主要上下文之前不会持续存在,因为它与持久协调器相关联 是的,但我很确定,这本书的意思是实际的持久保存,而不是存储。这就是我困惑的原因 你在用哪本书?【参考方案2】:

对于您的分析器,您必须了解核心数据堆栈

https://developer.apple.com/library/ios/documentation/DataManagement/Devpedia-CoreData/coreDataStack.html#//apple_ref/doc/uid/TP40010398-CH25-SW1

在您保存上下文之前,您对托管对象所做的更改不会提交到父存储。

【讨论】:

是的,我也是这么想的。但是这本书在这方面有点误导。这就是我在这里问这个问题的原因

以上是关于CoreData - 创建新实体 - 为啥不需要保存它?的主要内容,如果未能解决你的问题,请参考以下文章

为啥更改实体的属性时会删除我的 CoreData 信息?

为现有实体创建新的 CoreData 属性时 Swift 崩溃

CoreData 迁移和数据映射:从现有属性创建新实体

CoreData应用程序的维护

向 coredata 添加新实体 - 我还能使用轻量级迁移吗?

如何在 Coredata 中的相同实体之间创建多个关系?