我是否可以手动创建Core Data Entity类的实例以供临时使用?

时间:2010-02-12 10:40:12

标签: iphone core-data

我有一个名为“朋友”的核心数据实体的自定义类。在解析XML文件时,我需要创建临时实例来保存临时数据,此时不使用Core Data。所以有两种选择:

A)创建一个NSMutableDictionary来保存临时数据,同时解析XML中的“对象”。

B)在解析时使用实体的类来存储临时数据。我更喜欢这样,因为它对我来说更清晰,更干,因为已经在那里声明了数据结构,我不必在NSMutableDictionary中复制该实体的整个数据模型。

但是B有一个问题:默认情况下,所有属性都是@dynamic,据我所知,Core Data负责在运行时创建实现。所以我不能只使用那里的属性。因此,这提出了一个问题,即它是否值得努力,甚至可以以这样的方式修改该类,即它可以在没有Core Data作为临时数据容器对象的情况下使用,即通过创建实例变量。当然,如果我必须在那里创建一个字典来保存临时数据,那根本就没有意义,我会选择A。

2 个答案:

答案 0 :(得分:2)

更新:听起来你可以使用零上下文(参见下面亚当的答案)

不幸的是,实例化托管对象子类的唯一方法是将其插入上下文中。

使用可变字典(NSMutableDictionary)是最好的方法,因为您可以使用setValuesForKeysWithDictionary:通过单个方法调用填充新的托管对象。

另一种方法是插入托管对象,然后在确定它不是新对象时将其删除。如果您尚未保存,则该对象将永远不会被写入持久性存储 注意:这假定您在添加其唯一ID之前确定对象是否是新的,或者在获取唯一ID时排除临时对象(带有属性或使用它们的集合过滤掉)以便您仅检查以前存在的对象。

答案 1 :(得分:2)

不同意gerry3,Apple的文档暗示相反。您只需使用nil上下文调用指定的初始化程序:

  

-   (ID)initWithEntity:(NSEntityDescription   *)实体insertIntoManagedObjectContext :( NSManagedObjectContext   *)上下文

     

...   如果上下文不是nil,则此方法   调用[context insertObject:self]   (导致awakeFromInsert   调用)。

这似乎有效(我现在正在使用临时NSManagedObjects - 虽然我可能做错了)。