如何创建许多临时对象,然后只使用Core Data保存一个?

时间:2009-10-25 03:24:30

标签: iphone objective-c core-data

我正在开发一个应用程序,它将对在线服务执行搜索并生成许多Result对象。 Result对象是NSManagedObject,通过将其与NSManagedObjectContext相关联来根据需要进行初始化。

用户应该能够选择“结果”并将其另存为“收藏夹”。在应用程序中,这很简单,只需将Result实体与新的Favorite实体相关联并保存上下文。

问题在于,当然上下文中的每个结果都会与我想要收藏的结果一起保存到数据库中。

我见过很多使用多个NSManagedObjectContext实例来管理各种创建和持久性情况的例子。所有这些似乎都围绕着用一个Context创建新实例然后将它们合并到另一个上下文中以避免另一个FetchRequest执行的想法。这些示例无法解决问题,因为它们仍会导致保存每个Result实体。

有人有什么建议吗?我完全了解了这一点。

3 个答案:

答案 0 :(得分:5)

您应该为每个对象使用不同的上下文。使用单独的托管对象上下文允许您按如下方式工作。当用户选择其喜欢的对象时,您只需丢弃与剩余结果对象相关的上下文。无需合并更改等。基本上有一个权衡。您最终管理(创建/丢弃)多个上下文,但随后您可以轻松实现目标。否则,您仍然可以仅使用一个上下文来执行此操作。但是,您必须显式插入或删除每个对象,如以下代码段所示。

试试这个。仅对于要保存的收藏对象,请执行以下操作:

[managedObjectContext insertObject:theFavorite];

对于其他每个结果对象,请执行以下操作:

[managedObjectContext deleteObject:aResult];

然后像往常一样保存

NSError *error = nil
if (![managedObjectContext save:&error]) {
   // Handle error

}

这将仅保存您选择的最喜欢的对象。

答案 1 :(得分:4)

我更喜欢使用NIL上下文并且有一个基本域模型类来处理当我想要保留它们时递归地将对象添加到有效上下文。它的效果非常好(干净利落!)......此处提供的代码...... Temporary Core Data

答案 2 :(得分:3)

创建非NSManagedObject子类的Result对象。当用户选择一个时,创建一个托管实例并保存它。