iOS Core Data 不执行轻量级迁移
Posted
技术标签:
【中文标题】iOS Core Data 不执行轻量级迁移【英文标题】:iOS Core Data not performing Lightweight Migration 【发布时间】:2017-03-06 07:41:59 【问题描述】:我有一个包含两个实体的模型,比如说A
和B
。该模型是从从 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 不执行轻量级迁移的主要内容,如果未能解决你的问题,请参考以下文章