Iphone 核心数据:创建多个托管对象,但只保存一些?

Iphone 核心数据:创建多个托管对象,但只保存一些?,iphone,core-data,favorites,Iphone,Core Data,Favorites,我正在尝试为我的应用程序编写收藏夹系统。我已经将模型转换为托管对象。因此,假设用户看到一个屏幕,屏幕上有这样的对象列表。他们可以选择保存一些到他们的收藏夹中,这将把它们保存在核心数据中 问题是,当我创建所有这些模型对象时,我是在托管对象上下文中创建的。如果用户将单个实体保存到他们的收藏夹中,它将保存整个上下文,并保存每个实体。这些额外的内容不会出现在他们的收藏夹中,因为添加到收藏夹会构造一个“收藏夹”实体,该实体会被保存并指向其他人没有的对象。但所有其他对象都将被不必要地保存 设计iPhone收

我正在尝试为我的应用程序编写收藏夹系统。我已经将模型转换为托管对象。因此,假设用户看到一个屏幕,屏幕上有这样的对象列表。他们可以选择保存一些到他们的收藏夹中,这将把它们保存在核心数据中

问题是,当我创建所有这些模型对象时,我是在托管对象上下文中创建的。如果用户将单个实体保存到他们的收藏夹中,它将保存整个上下文,并保存每个实体。这些额外的内容不会出现在他们的收藏夹中,因为添加到收藏夹会构造一个“收藏夹”实体,该实体会被保存并指向其他人没有的对象。但所有其他对象都将被不必要地保存


设计iPhone收藏夹系统的标准方法是什么?我是否应该将模型分为两类,一类显示给用户,另一类保存到数据库?这样我就可以构建我的模型,而无需将它们放入主运行中心。但这将是一个具有所有相同字段的重复类。

没有真正的标准方法来实现这一点,因为核心数据要求您保存创建的对象。但是,如果使用以下方式创建对象:

id object = [[NSManagedObject alloc] initWithEntityDescription:entity inManagedObjectContext:nil];
它们将没有可保存的上下文。然后,对于需要保存的文件,您可以:

[[self managedObjectContext] insertObject:object];

然后在上下文上调用
-save:
,只有那些设置了上下文的对象才会保存。

在托管对象上设置isFavorite属性不是更容易吗。然后在“收藏夹”视图中,您可以基于此进行筛选?

这是否安全?我看到构造NSMOs的便利方法替换了一大块代码。是的,它是安全的,什么便利方法?我描述的方法与调用
[NSEntityDescription insert…]
相同。唯一的区别是
NSEntityDescription
方法返回一个自动释放的对象。正确的调用是
[[self-managedObjectContext]addObject:object]
,与之相反的调用不存在。正确的,从内存编码而不使用编译器会产生这样的小错误:)Hi@MarcusS.Zarra。我知道这是你的一个老答案,但最近其他地方的讨论是为了避免使用nil上下文,因为存在各种可能的问题(例如)。有没有办法用子上下文来实现这一点?我可以很容易地看到如何创建子上下文来生成结果,但保存它只会将所有内容转储回父上下文。是否可以使用相同的insertObject方法将特定的“收藏夹”从子对象移动到父对象,并保留其余的?但这仍然无法回避我正在保存大量不需要的数据这一事实。