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
并查看applicationWillTerminate
,saveContext()
在那里被调用。
简而言之,如果你想持久化数据那么是的,你需要调用saveContext()
【讨论】:
啊,这很有道理。在书中,它说它会在创建新条目后立即保存。这有点误导。 它会立即存储在上下文中,但在保存之前不会持久化。此外,如果您有一个ManagedObjectContext
是主上下文的子级,那么当您保存子级时,它将被保存到主上下文中。但在您保存主要上下文之前不会持续存在,因为它与持久协调器相关联
是的,但我很确定,这本书的意思是实际的持久保存,而不是存储。这就是我困惑的原因
你在用哪本书?【参考方案2】:
对于您的分析器,您必须了解核心数据堆栈
https://developer.apple.com/library/ios/documentation/DataManagement/Devpedia-CoreData/coreDataStack.html#//apple_ref/doc/uid/TP40010398-CH25-SW1
在您保存上下文之前,您对托管对象所做的更改不会提交到父存储。
【讨论】:
是的,我也是这么想的。但是这本书在这方面有点误导。这就是我在这里问这个问题的原因以上是关于CoreData - 创建新实体 - 为啥不需要保存它?的主要内容,如果未能解决你的问题,请参考以下文章
为现有实体创建新的 CoreData 属性时 Swift 崩溃