【问题标题】:Core Data entity new attribute - is new model version required核心数据实体新属性 - 是否需要新模型版本
【发布时间】:2016-09-07 05:21:15
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

  • 这也是我的观察,在没有创建新的 MOM 版本的情况下更改了属性名称,一切正常,加载持久存储和轻量级迁移在我现有的数据上成功完成。你找到任何解释了吗?文档没有提到这种行为。
  • 你找到这个问题的答案了吗?我也有同样的问题!
  • @BlackM 我没有找到准确的答案,但我现在正在使用没有新模型版本的轻量级迁移进行许多更新,并且效果很好。所以,我想为添加新属性等简单更改创建新版本是没有意义的
  • 这种方法的问题在于,当您发现您的特定“简单更改”需要新版本时很难 - 除非您在发布前彻底测试升级。为每次更改添加新版本更加安全。

标签: ios objective-c swift core-data


【解决方案1】:

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

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

【讨论】:

  • 此类错误与 Core Data 迁移无关。我的问题涉及迁移本身,以及我概述的过程是否会在任何时候导致“用于打开商店的模型与用于创建商店的模型不同”错误。您概述的错误只会导致保存操作失败。而且无论是否使用迁移都会出现这个错误
  • 不是因为上述问题与未实施迁移有关。就我而言,迁移已实施并且效果很好。但是,它错过了创建新模型版本的步骤。根据所有教程,我发现这一步至关重要。根据我的观察,这根本不是重要的。我的问题是关于在某些时候省略这一步是否会导致错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 2012-07-03
  • 2010-11-19
  • 2018-10-13
相关资源
最近更新 更多