2009-10-30 70 views
2

我正在研究一个核心数据iPhone应用程序,它将Web中的远程资源拖入NSManagedObjects并将其保存到本地。保存一些NSManagedObjects而不是其他的方法?

我希望用户能够指定应保存这些对象中的哪一个。这意味着一些将被保存,但许多应该被删除。不过,我可能希望在不同的时间保存和删除 - 我希望立即保存指定的对象(以防应用程序崩溃),但仍然保留其他对象,因为它们在表视图中等待。

我能想到的一种方法是拥有一个不同的持久性商店 - 一个用于保存的东西,一个用于不会的东西;这样我可以随时保存“应该保存”的商店。但是,我更愿意将相同类型的对象保留在同一个域中。

另一种方法是在最后保存 - 否定任何从崩溃中恢复的能力。但最终的保存将允许我解析出任何未被指定为“应该保存”的对象。

而这正是我想要的 - NSManagedObject类中的“shouldSave”方法,或者至少可以在选择对象时触发的保存方法。但据我所知,这些都不存在。

所以,如果有人有任何其他建议,请让我知道!这将不胜感激。

回答

2

CoreData不用于对象序列化,它是一个对象图序列化。这是一个重要的区别。一旦你有一个NSManagedObject,它就与一个上下文相关联,CoreData处理上下文级的保存,因为这是保证任何类型的对象图一致性的唯一方式。换句话说,你不能保存单个对象,因为如果它们与其他对象有关系,你还需要保存这些对象,并且它会很快地降级到整个图形。

你似乎担心崩溃恢复。如果应用程序崩溃并且用户重新启动,那么他们希望只看到它们保存的项目,或者它们在崩溃之前在屏幕上显示的所有内容?如果是前者,则应在保存时删除它们,并将其从用户视图中删除(使用某些动画),如果是后者,则应该提交所有内容,并可能在另一时间删除您不感兴趣的对象。

+0

我认为我的Rails背景只是希望核心数据是一个“智能图形”,可以级联保存相关对象而不必保存其他所有内容:) 不是这样,我想过你的问题的崩溃恢复,这是非常有益的。我认为我最好的选择是保存下载的所有内容,稍后再删除 - 比如用户进行新的搜索,有效地清除上次搜索中的任何对象,以及在启动时进行一般清理。 非常感谢您的意见! – 2009-10-30 17:56:01

相关问题