核心数据,NSManagedObject 在应用版本之间发生变化

Posted

技术标签:

【中文标题】核心数据,NSManagedObject 在应用版本之间发生变化【英文标题】:core data, NSManagedObject changed between app versions 【发布时间】:2011-06-08 15:11:11 【问题描述】:

我现在在 App-Store 有一个应用,它使用带有持久存储的 Core-Data 将数据保存为 SQL-Lite-store-type,在设备本地保存。

其实Model很简单,我里面只有一个NSManagedObject,叫“Product”。

在下一个版本中,我想通过以下方式编辑“产品”属性:添加一个新属性并删除 5 个属性。 (没有应用程序因为不一致而崩溃......)

另外,在用户升级后首次启动应用程序时,我想删除旧的存储数据库,因为它不再与应用程序相关。

我阅读了“核心数据模型版本控制和数据迁移编程指南”,但仍然不确定在这种情况下最佳实践是什么。 (我应该使用“轻量级迁移”吗?)

请帮帮我……

【问题讨论】:

【参考方案1】:

使用轻量级迁移是这里最简单的选择。如果您所做的只是添加属性,轻量级迁移可以让您避免处理不一致错误。

【讨论】:

我需要删除 5 个属性!!!据我了解,“轻量级迁移”不支持它。那么:如何在升级版本首次启动时删除旧的存储数据库? 添加和删除属性很好。文档没有明确说它支持在轻量级迁移中添加属性,但确实如此。在执行轻量级迁移时,您也不需要删除旧数据库。如果要删除旧数据库,可以在应用程序委托中执行此操作,其中使用以下代码将持久存储添加到持久存储协调器:'[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];'

以上是关于核心数据,NSManagedObject 在应用版本之间发生变化的主要内容,如果未能解决你的问题,请参考以下文章

多线程核心数据 - NSManagedObject 无效

将 NSManagedObject 更新为核心数据

核心数据。对大尺寸 NSManagedObject 的 NSMutableSet 进行排序

iPhone核心数据可以缓存NSManagedObject吗?

当更新版本已经在内存中时,强制核心数据从以前存储的版本刷新 NSManagedObject

具有两个不同核心数据 NSManagedObject 实体的 NSTreeController