objective-c - 我应该如何将对象实例导入核心数据?

标签 objective-c ios core-data initialization

我创建了一个使用 CoreLocation 和反向地理编码的自定义 LocationGenerator 类,并生成(当被询问时)一个自定义 Location 对象。我的自定义 Location 对象有两个实例变量 - 地址和 GPS...都指向两个自定义类的实例 - 地址是一串字符串,GPS 是三个 float - 纬度、经度和高度。

位置=地址+GPS

为此,我需要创建三个自定义类 - Location、Address 和 GPS,它们都在各自的初始化方法中设置了默认值。

然后我转向核心数据。在模型中,我有这些实体——项目、位置、地址和 GPS。 Item 实体有一些简单的字符串属性和 Location 关系。 位置实体具有地址和 GPS 关系。

自从我转向核心数据后,我删除了上面提到的自定义类 Location Address 和 GPS,让 Xcode 根据核心数据模型生成类。

问题是,我不确定如何在 LocationGenerator 中创建 Location 实例。 我以前对位置和地址以及 GPS 的类定义已经消失,在那些来自核心数据的类中,我不应该覆盖 init 方法。但是那些生成的类是否应该成为我的新位置对象的蓝图?

我想我的问题是,我应该如何在 LocationGenerator 中生成位置对象。 LocationGenerator 是否应该在托管对象上下文“内部”创建其 Location 对象? 从 UI 的角度澄清 - 我只是在创建一个项目的过程中,但它还没有创建,它等待位置..然后它才被插入到核心数据中.. 我是否应该以与之前查看对象相同的方式查看在上下文中创建的所有对象,唯一的区别是它们在上下文中(并由 CD 规则管理)并且它们持续存在?

最佳答案

托管对象(即 Core Data 对象)的指定初始化程序是 -initWithEntity:insertIntoManagedObjectContext: 这就是说,如果托管对象不与 managedObjectContext 相关联,则无法创建托管对象.您表示要创建该对象,然后在稍后的某个时间决定是否存储它。基本上有两种方法可以做到这一点。第一种方法是拥有一些不是 NSManagedObject 的其他对象类型,但是当您决定应该保留它时,您可以使用它来填充 NSManagedObject 子类。另一种方法是只在上下文中创建托管对象,然后在发现不需要它时将其从上下文中删除。

NSManagedObjectContexts 可以被认为是“便签本”。在您 -save: 上下文之前,实际上什么都没有持久化,因此如果您要能够确定是否将对象持久化到您要进行的同一工作流中为了保存上下文,第二种方法可能是可行的方法。如果此预留数据的生命周期比您使用 ManagedObjectContexts 执行的标准工作流长,那么第一种方法可能更好。

HTH.

关于objective-c - 我应该如何将对象实例导入核心数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9151815/

相关文章:

ios - 不规则保留 NSNumbers 的计数

ios - 如何快速访问另一个类的变量?

ios - Xcode8:图像字面量在框架中的使用

ios - 当更新数据库后只有少量数据发生变化时,数据通常如何在设备上重新加载/显示? (概念上)

swift - CoreData 多线程正在生成随机崩溃

ios - 将数据插入 Core Data 并检查它是否已经存在

objective-c - 将代码从 Objective-C 转换为 Swift

iphone - 将 native iphone 相机缩放 slider 和 youtube 播放器 Controller 添加到我的应用程序

ios - iPhone Facebook Api Friends.getLists 什么都不返回

ios - 将数据从 Parse tableview 传递到 WatchKit