2

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

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

有什么方法可以让 TempPerson NSObject 用于搜索列表吗?但是,我不必手动从临时对象中提取 45 个属性并在 managedObject 上手动设置它们!

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

我看过 Apple 的示例代码,他们在其中构建了一个临时存储,以方便在尚未持久化的对象上撤消/重做和其他内容。在我的情况下,我觉得这太过分了。我只需要显示搜索结果,直到用户选择要保留的人。

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

感谢您的任何建议。

4

2 回答 2

4

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

于 2009-11-16T04:57:44.753 回答
3

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

于 2009-11-16T08:34:49.810 回答