NSManagedObject用于临时使用,如何在NSObject和NSManagedObject之间切换

时间:2009-11-16 04:43:08

标签: iphone core-data nsobject

我正在为我的iPhone应用程序使用Core Data模型。我一直在寻找一种方法来实例化或使用ManagedObjectContext之外的实体。 (不应该这样做,我知道,我也在寻找一种不这样做的方法,但无论如何都能获得好处。)

我的挑战是我有一个用户可以搜索“人员”的视图,解析所有搜索结果并将其放入Person managedObject,然后显示在列表中。 如果用户单击列表中的Person,那么我才会将Person实体持久保存到商店,但是这需要我删除所有其他结果,这样它们就不会与所需的结果一起保留。另外据我所知,如果用户决定使用该应用程序,则该商店会被保留,可能会将所有当前搜索结果与真实用户数据混合在一起!

我有什么方法可以使用我可以用于搜索列表的TempPerson NSObject吗?但是,如果没有,我必须从temp对象手动拉出45个属性并在managedObject上手动设置它们!

有点像: NSManagedObject aPersonCorrectlyReturnedFromTheStore =(NSManagedObject *)tempPersonOfJustTypeNSObject

我见过Apple的示例代码,他们构建了一个临时存储来促进撤销/重做以及其他尚未持久存在的对象。我认为这对我的情况来说太过分了。我只需要显示搜索结果,直到用户选择要保留的人员为止。

希望我很清楚我想要做什么,感觉我的核心数据词汇还不够大:)

感谢您的任何建议。

2 个答案:

答案 0 :(得分:4)

您可以将每个临时人物对象创建为NSDictionary或NSMutableDictionary。然后,您可以创建一个新的Person托管对象,并使用NSManagedObject实例符合KVC并使用setValuesForKeysWithDictionary的事实:。

答案 1 :(得分:3)

在您向托管对象上下文发送save:消息之前,实际上不会保留插入的新托管对象。
在集合(集合或数组)中跟踪它们 - 您可能已经这样做了,因为您以某种方式呈现搜索结果。然后,除了用户选择的那个之外,删除它们(deleteObject:) 永远不会存储已删除的托管对象。