2012-02-05 36 views
0

我创建了一个使用CoreLocation和Reverse Geocoding的自定义LocationGenerator类,并生成(当被询问时)一个自定义位置对象。我的自定义位置对象有两个实例变量 - 地址和GPS ...都指向两个自定义类的实例 - 地址是一串字符串,GPS是三个浮点数 - 纬度,经度和高度。如何将对象实例导入Core数据?

位置=地址+ GPS

对于这项工作,我需要创建三个自定义类 - 位置,地址和GPS,都在各自的init方法设置的默认值。

然后我搬到了Core Data。在模型中,我有这些实体 - 项目,位置,地址和GPS。物品实体具有一些简单的字符串属性和位置关系。 位置实体具有地址和GPS关系。

由于我转移到核心数据,我删除了上面提到的自定义类位置地址和GPS,并让Xcode根据核心数据模型生成类。

问题是,我不知道如何在LocationGenerator中创建Location实例。 我以前的位置和地址和GPS的类定义已经消失了,而在那些来自核心数据的类中,我不应该重写init方法。但是如果这些生成的类是我新的Location对象的蓝图?

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

回答

2

受管理对象(即核心数据对象,即)的指定初始值设定项是-initWithEntity:insertIntoManagedObjectContext:也就是说,如果不与托管对象关联,则无法创建托管对象。您表示要创建该对象,然后稍后再决定是否存储该对象。基本上有两种方法可以做到这一点。第一种方法是让其他一些不是NSManagedObject的对象类型,但可以在稍后决定应该保留它时使用它来填充NSManagedObject子类。另一种方法是在上下文中创建托管对象,如果事实证明您不需要它,则将其从上下文中删除。

NSManagedObjectContexts可以被认为是“scratch pad”。实际上,除非你的上下文中没有任何内容,否则什么都不会持续,所以如果你能够确定是否将对象保存在要保存上下文的同一工作流中,第二种方法是可能是要走的路。如果这个预先保存的数据的生命周期比您使用ManagedObjectContexts执行的标准工作流程更长,那么第一种方法可能会更好。

HTH。

相关问题