保存一些 NSManagedObjects 而不是其他的方法?

Posted

技术标签:

【中文标题】保存一些 NSManagedObjects 而不是其他的方法?【英文标题】:Approaches to save some NSManagedObjects but not others? 【发布时间】:2009-10-30 07:50:47 【问题描述】:

我正在开发一个 Core Data iPhone 应用程序,该应用程序将远程资源从 Web 拉入 NSManagedObjects 并保存在本地。

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

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

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

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

所以,如果有人有任何其他建议,请告诉我!将不胜感激。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我认为我的 Rails 背景只是希望核心数据成为一个“智能图”,可以级联保存相关对象而无需保存其他所有内容:) 事实并非如此,我认为关于您的崩溃恢复问题,这非常有帮助。我认为我最好的选择是在下载后保存所有内容,然后只删除 - 例如当用户进行新搜索时,有效地清除上次搜索中的任何对象,以及在启动时进行一般清理。非常感谢您的意见!

以上是关于保存一些 NSManagedObjects 而不是其他的方法?的主要内容,如果未能解决你的问题,请参考以下文章

保存太多新的 NSManagedObjects 时 Mac OS 应用程序崩溃

使用 setPropertiesToFetch 时将数据保存在 NSManagedObjects

ResKit:临时 NSManagedObjects

创建但不保存 NSManagedObjects

优化批量删除和创建 NSManagedObjects

为啥有些实体 NSManagedObjects 和一些以其类命名?