ios - 代码=134110 - 强制目标属性上缺少属性值的验证错误

标签 ios swift core-data lightweight-processes

上下文:

  • 使用 CoreData 的应用
  • 过去成功执行的一些轻量级迁移(达到模型版本的第4次迭代)
  • 客户想要一个新功能
    • 创建了第 5 个模型版本
    • 向 TestModel 实体添加了一个糟糕的新属性,一个名为 new_one 的非可选 bool 值

结果:

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}";

}

解决方案:

我不完全理解为什么会发生这种情况(我太累了,急于把这个问题抛在脑后),但是“强制目标属性”这件事给我指明了将属性设置为可选属性的方向。这是正确的做法还是普通的 hack...我不知道...但它解决了我的问题,我现在可以继续下一步

enter image description here

最佳答案

您几乎一语中的,但听起来您可能不知道为什么。这是因为:

  1. 该属性是必需的
  2. 这意味着保存更改时它必须有一个值
  3. 迁移保存更改,但是
  4. 您没有为此属性提供任何值。

这直接导致您收到错误。

您可以使用以下任一方法解决此问题:

  • 像您所做的那样将该属性设为可选。迁移后,所有迁移的对象都没有值,但这没关系。
  • 保持非可选但在模型编辑器中提供默认值。迁移后,所有迁移的对象都具有默认值。
  • 设置非轻量级迁移并在迁移发生时提供值。迁移后,每个迁移的对象都具有您在迁移期间提供的任何值。

关于ios - 代码=134110 - 强制目标属性上缺少属性值的验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46092508/

相关文章:

ios - 开发人员可以在 Windows 应用程序中使用 iCloud 吗?

ios - 为 ScrollView 上的双指滑动分配独特的行为

swift - iOS 13 位置权限 - 从 iOS 12 升级后的行为是什么

objective-c - Core Data 中的地址簿联系人

cocoa - 在非连续版本之间迁移时出现核心数据迁移错误

core-data - 对核心数据属性求和

ios - 在 Swift 4 中从 uitextfields 将数据发布到服务器

ios - 使用 UIAppearance 代理自定义 UITableViewCell

iOS - 远程类中的调用方法

ios - 如何更改 tabBarController 中所选项目的背景颜色