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

use*_*448 10 iphone core-data objective-c

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

用户应该能够选择"结果"并将其另存为"收藏夹".在应用程序中,这就像将Result实体与新的Favorite实体相关联并保存上下文一样简单.

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

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

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

Mas*_*aro 5

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

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

[managedObjectContext insertObject:theFavorite];
Run Code Online (Sandbox Code Playgroud)

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

[managedObjectContext deleteObject:aResult];
Run Code Online (Sandbox Code Playgroud)

然后像往常一样保存

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

}
Run Code Online (Sandbox Code Playgroud)

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