代码=134110 - 强制目标属性上缺少属性值的验证错误
Code=134110 - Validation error missing attribute values on mandatory destination attribute
上下文:
- 使用 CoreData 的应用程序
- 过去成功执行的一些轻量级迁移(达到模型版本的第4次迭代)
- 客户想要一个新功能
- 创建了第 5 个模型版本
- 向 TestModel 实体添加了一个糟糕的新 属性,一个名为 new_one 的非可选布尔值
结果:
CoreData: error: NSUnderlyingError = "Error Domain=NSCocoaErrorDomain Code=134110 \"An error occurred during persistent store migration.\"
UserInfo={
entity= TestModel,
attribute=new_one,
reason=Validation error missing attribute values on mandatory destination attribute}";
}
解法:
我不完全理解为什么会发生这种情况(我太累了,急于把这个问题抛在脑后),但是 "mandatory destination attribute" 的事情给我指明了设置 属性 的方向作为可选。这是正确的做法还是普通的 hack...我不知道...但它解决了我的问题,我现在可以继续下一步
您几乎一语中的,但听起来您可能不知道为什么。这是因为:
- 该属性是必需的
- 这意味着保存更改时它必须有一个值
- 迁移保存更改,但是
- 您没有为此属性提供任何值。
这直接导致了您收到的错误。
您可以使用以下任一方法解决此问题:
- 像您所做的那样将该属性设置为可选。迁移后,没有迁移的对象有值,但没关系。
- 保持非可选但在模型编辑器中提供默认值。迁移后,所有迁移的对象都具有默认值。
- 设置非轻量级迁移并在迁移发生时提供值。迁移后,每个迁移的对象都具有您在迁移期间提供的任何值。
我认为提供默认值比多余的可选性更好。
只有当一个值确实是可选的时才最好使用可选的。
上下文:
- 使用 CoreData 的应用程序
- 过去成功执行的一些轻量级迁移(达到模型版本的第4次迭代)
- 客户想要一个新功能
- 创建了第 5 个模型版本
- 向 TestModel 实体添加了一个糟糕的新 属性,一个名为 new_one 的非可选布尔值
结果:
CoreData: error: NSUnderlyingError = "Error Domain=NSCocoaErrorDomain Code=134110 \"An error occurred during persistent store migration.\"
UserInfo={
entity= TestModel,
attribute=new_one,
reason=Validation error missing attribute values on mandatory destination attribute}";
}
解法:
我不完全理解为什么会发生这种情况(我太累了,急于把这个问题抛在脑后),但是 "mandatory destination attribute" 的事情给我指明了设置 属性 的方向作为可选。这是正确的做法还是普通的 hack...我不知道...但它解决了我的问题,我现在可以继续下一步
您几乎一语中的,但听起来您可能不知道为什么。这是因为:
- 该属性是必需的
- 这意味着保存更改时它必须有一个值
- 迁移保存更改,但是
- 您没有为此属性提供任何值。
这直接导致了您收到的错误。
您可以使用以下任一方法解决此问题:
- 像您所做的那样将该属性设置为可选。迁移后,没有迁移的对象有值,但没关系。
- 保持非可选但在模型编辑器中提供默认值。迁移后,所有迁移的对象都具有默认值。
- 设置非轻量级迁移并在迁移发生时提供值。迁移后,每个迁移的对象都具有您在迁移期间提供的任何值。
我认为提供默认值比多余的可选性更好。
只有当一个值确实是可选的时才最好使用可选的。