iOS Core Data 不执行轻量级迁移

Posted

技术标签:

【中文标题】iOS Core Data 不执行轻量级迁移【英文标题】:iOS Core Data not performing Lightweight Migration 【发布时间】:2017-03-06 07:41:59 【问题描述】:

我有一个包含两个实体的模型,比如说AB。该模型是从从 Internet 下载的 sqlite 文件加载的(符合 Core Data 的 sqlite 格式;即以“Z”开头的表和列)。

我为我的模型添加了一个新版本;向实体B 引入默认值为零的非可选整数属性。出于某种原因,每当我查询该实体时,我都会得到nil 结果和no such column ZVERSION 的错误对象(version 是新的属性名称),即使我在查询中没有使用version

可能出了什么问题?

【问题讨论】:

【参考方案1】:

您可以有一个名为“版本”的属性 - 它是保留的。来自苹果的文档:

请注意,属性名不能与 NSObject 或 NSManagedObject 的任何无参数方法名相同。例如,您不能为属性命名为“description”。 NSObject 上有数百个方法可能与属性名称冲突——而且这个列表可能会在没有来自框架或其他库的警告的情况下增长。您应该避免使用非常笼统的词(例如“字体”和“颜色”)以及与 Cocoa 范例重叠的词或短语(例如“isEditing”和“objectSpecifier”)。

(来源:https://developer.apple.com/reference/coredata/nspropertydescription)

'version' 是用于归档的 NSObject 的类方法: https://developer.apple.com/reference/objectivec/nsobject/1415151-version

也不支持在核心数据之外创建 SQL 文件并将其导入。 Apple 没有发布它的 sqlite 格式,您可能不符合它。也许 Apple 有一些你不知道的 ZVERION 专栏。

【讨论】:

Also creating an SQL file outside of core data and importing it is not supported 好吧,它可能没有记录,但它是可能的。见this。

以上是关于iOS Core Data 不执行轻量级迁移的主要内容,如果未能解决你的问题,请参考以下文章

OS X 上的 Core Data 轻量迁移

iOS Core Data - 用于将关系从非可选更改为可选的轻量级迁移

如何将一个 Core Data 模型迁移到一个全新的模型?

Core Data 和 Restkit 简单轻量级迁移错误

iCloud、Core Data、迁移和模型映射

Core Data 轻量级迁移 - 现有实体是不是添加了新属性?