我有我的核心数据存储,我使用标志'NSInferMappingModelAutomaticallyOption',这样每当我更改核心数据模型时,我首先创建一个新的模型版本,并自动迁移对数据模型的更改。
但是,我需要更改其中一个实体的属性类型。当我这样做时,自动迁移似乎不起作用,当我尝试运行我的应用程序时出现Core Data错误。
如何设置此项以继续自动模型迁移?
答案 0 :(得分:13)
你不能使用轻量级迁移,所以它有点难(感谢Apple),但并非不可能
在Xcode 7.1中一步一步:
<强> 1。创建新的模型版本:
.xcdatamodeld
型号 - &gt; Editor
- &gt; Add model version ...
attribute type
<强> 2。自定义核心数据映射模型
New file -> Mapping Model
(核心数据 - &gt;映射模型)source
(来自型号)和target
(模型)版本的模型NameToName
。更改此文件中目标实体中已更改属性的值表达式反映了您需要的值:FUNCTION($entityPolicy, "<*transformingMethodName*>" , $source.<*attributeName*>)
- transformingMethodName:将调用以转换属性类型的自定义方法。 (将在下一步中定义 - 保持)
- attributeName:您更改的属性名称
答案 1 :(得分:11)
轻量级迁移不支持属性类型更改:
要使Core Data能够生成推断的映射模型,更改必须符合明显的迁移模式,例如:
- 简单添加新属性
- 删除属性
- 非可选属性变为可选
- 可选属性变为非可选属性,并定义默认值
- 重命名实体或财产
我假设你正在使用轻量级迁移。但斯科特指出,也许你不是。如果要使用自动迁移(与轻量级迁移不同),您仍可以通过提供映射模型来执行此操作。在这种情况下:
Core Data将尝试在应用程序包中找到源和映射模型,并执行迁移。
但是这种迁移不会轻量级。核心数据将打开两个存储 - 源和目标 - 并复制内存中的所有实体。因此,应用程序消耗的内存取决于商店中的数据量。