Iphone 如何创建多个临时对象,然后使用核心数据仅保存一个?

Iphone 如何创建多个临时对象,然后使用核心数据仅保存一个?,iphone,objective-c,core-data,Iphone,Objective C,Core Data,我正在开发一个应用程序,它将对在线服务执行搜索并生成许多结果对象。结果对象是NSManagedObject,通过将其与NSManagedObjectContext关联,根据需要进行初始化 用户应该能够选择“结果”并将其保存为“收藏夹”。在应用程序中,这就像将结果实体与新的常用实体关联并保存上下文一样简单 问题是,当然,上下文中的每一个结果都会与我希望得到的结果一起保存到数据库中 我见过许多使用多个NSManagedObjectContext实例来管理各种创建和持久性情况的示例。它们似乎都围绕着这

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

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

问题是,当然,上下文中的每一个结果都会与我希望得到的结果一起保存到数据库中

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


有人有什么建议吗?我对此感到非常厌倦。

创建不是NSManagedObject子类的结果对象。当用户选择一个实例时,创建一个托管实例并保存。

您应该为每个对象使用不同的上下文。使用单独的托管对象上下文允许您按如下方式工作。当用户选择其喜爱的对象时,您只需放弃与其余结果对象相关的上下文。不需要合并更改等。基本上是一种折衷。最终,您可以管理(创建/放弃)多个上下文,但这样您就可以轻松实现目标。否则,您仍然可以使用单个上下文来完成此操作。但是,您必须显式地插入或删除每个对象,如以下代码段所示

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

[managedObjectContext insertObject:theFavorite];
对于其他每个结果对象,请改为执行以下操作:

[managedObjectContext deleteObject:aResult];
然后像往常一样保存

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

}

这将只保存您选择的、喜爱的对象。

我更喜欢使用NIL上下文,并有一个基本域模型类来处理递归地将对象添加到有效上下文中(当我想要持久化它们时)。它真的很好(而且干净!)。。。代码在这里可用

为了简洁起见,我把问题简化了。结果对象是一个具有许多属性和若干关系的实体。一想到要复课,我就吐了:)我们同意你答案的第一部分。我们使用每个对象的上下文图,并根据需要保存它。这是临时对象的好解决方案。然而,当您将对象添加到具有上下文的关系集中时会发生什么?这里最好的方法是什么?也可以看到这个问题: