ios - 核心数据实体新属性 - 是否需要新模型版本

标签 ios objective-c swift core-data

我有一个与轻量级迁移和 Core Data 版本控制的使用相关的非常简单的问题。

众所周知,在修改 Core Data 模型时,需要确保可以从旧模型转换到新模型。

对于简单的更改(如添加新属性),只需轻量级迁移即可。网上有很多信息表明,要确保一切正常,需要:

  1. 创建新模型版本
  2. 进行必要的修改
  3. 将修改后的版本指定为新的当前版本
  4. 使用以下选项支持轻量级迁移:

    让选项 = [NSMigratePersistentStoresAutomaticallyOption:true,NSInferMappingModelAutomaticallyOption:true]

这种方法绝对有效。但是,我还发现,对于简单的更改,不需要新的模型版本。在我的一个应用程序中,我已经发布了几个更新,其中包括对 Core Data 模型的更改(所有这些都包含新属性的添加)并且轻量级迁移已成功应用没有任何新模型版本。

根据我的经验,似乎当一个人修改 Core Data 版本时,它会被分配一个某种新的标识符。然后,当该版本在具有该型号旧版本的手机上启动时,执行轻量级迁移,对于简单的更改没有任何问题。

但是,鉴于每个教程都建议创建一个新的模型版本,有人可以告诉我我是否遗漏了我的方法会导致崩溃的某些场景吗?

最佳答案

嗯...我想你错过了一件事。如果您的“新属性”是必填字段,那么您必须为该必填字段分配一个默认值

注意:如果您没有为该非可选属性设置默认值,那么该属性将被分配一个nil值,该值最终导致崩溃

关于ios - 核心数据实体新属性 - 是否需要新模型版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37168876/

相关文章:

ios - 将数据写入文件

ios - 如何通过HTTP POST将字符“&”发送到带有iOS 7的服务器?

ios - Xcode Swift - 如何初始化包含任意数量元素的 [[AnyObject]] 二维数组

Swift 组合 block 运算符

swift - macOS - 如何在 NSTableView 中使用复选框?

iOS UIRefreshControl 在单 View 应用程序中,没有表

ios - ReactiveSwift 不适用于 Xcode 8.1。转换为 Swift 3 会导致 >50 个错误。修复?

php - Xcode 将带 url 的变量发送到 php 页面,为 select 语句检索 php 代码中的变量

iphone - 直到 pushViewController 才应用外观更改

ios - 将新委托(delegate)添加到新 Controller 的问题