我应该如何将对象实例导入核心数据?
Posted
技术标签:
【中文标题】我应该如何将对象实例导入核心数据?【英文标题】:How should I import object instances into Core data? 【发布时间】:2012-02-05 18:30:38 【问题描述】:我创建了一个使用 CoreLocation 和反向地理编码的自定义 LocationGenerator 类,并生成(当被询问时)一个自定义 Location 对象。我的自定义位置对象有两个实例变量 - 地址和 GPS...都指向两个自定义类的实例 - 地址是一堆字符串,GPS 是三个浮点数 - 纬度、经度和高度。
位置 = 地址 + GPS
为此,我需要创建三个自定义类 - Location、Address 和 GPS,它们都在各自的 init 方法中设置了默认值。
然后我转到 Core Data。在模型中,我有这些实体 - 项目、位置、地址和 GPS。项目实体有一些简单的字符串属性和位置关系。 位置实体具有地址和 GPS 关系。
自从我转向核心数据,我删除了上面提到的自定义类 Location Address 和 GPS,让 Xcode 基于核心数据模型生成类。
问题是,我不知道如何在 LocationGenerator 中创建 Location 实例了。 我以前对 Location 和 Address 以及 GPS 的类定义已经消失了,在那些来自核心数据的类定义中,我不应该重写 init 方法。但是那些生成的类应该是我的新 Location 对象的蓝图吗?
我想我的问题是,我应该如何在 LocationGenerator 中生成位置对象。 LocationGenerator 是否应该在托管对象上下文“内部”创建其 Location 对象? 从 UI 的角度澄清 - 我只是在创建一个项目的过程中,但它还没有创建,它等待位置..然后才将它插入到核心数据中.. 我是否应该像以前查看对象一样查看在上下文中创建的所有对象,唯一的区别是它们在上下文中(并由 CD 规则管理)并且它们持续存在?
【问题讨论】:
【参考方案1】:托管对象(即核心数据对象)的指定初始化程序是-initWithEntity:insertIntoManagedObjectContext:
,也就是说,如果托管对象没有与 managedObjectContext 关联,则无法创建它。您表明要创建对象,然后在稍后决定是否存储它。基本上有两种方法可以做到这一点。第一种方法是拥有一些不是 NSManagedObject 的其他对象类型,但您可以在以后决定将其持久化时使用它来填充 NSManagedObject 子类。另一种方法是在上下文中创建托管对象,然后在不需要时将其从上下文中删除。
NSManagedObjectContexts 可以被认为是“便签本”。在您 -save:
上下文之前,实际上没有任何东西被持久化,因此,如果您能够确定是否将对象持久保存在您要保存上下文的同一工作流程中,第二个方式可能是要走的路。如果此预持久数据的生命周期比您使用 ManagedObjectContexts 执行的标准工作流程长,那么第一种方法可能会更好。
HTH。
【讨论】:
以上是关于我应该如何将对象实例导入核心数据?的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在AppDelegate中实例化核心数据的单个对象并在整个应用程序中使用它吗?