ios - 在没有打开版本控制的情况下更改核心数据模型

标签 ios objective-c core-data database-migration core-data-migration

我稍微改变了我的 Core Data 模型(将一些属性设置为 optionalnon-optional)。

不幸的是我没有打开自动版本控制...

我昨天已经将我的应用程序上传到 App Store,Apple 仍在对其进行审核。 我担心它会破坏我的应用程序的现有安装。

这就是为什么我想取消我当前上传的二进制文件并将我的核心数据模型重置为以前的属性设置,然后再次上传应用程序。

这引出了以下问题:

  • 如何确定当前数据模型是否与 现有的?这是纯粹根据属性比较来完成的吗 或者通过比较 Core 目录文件中的 systemVersion 数据模型?
  • 我怎样才能解决我的问题并避免我的应用程序的新版本
    将由于不兼容的数据模型导致崩溃

最佳答案

兼容版本由匹配的版本号决定。

按照您的建议解决问题。提取二进制文件,恢复更改,对模型进行版本控制,重新进行更改,确保启用自动迁移并测试其是否正常工作。

版本号是通过生成比较相等的组件的 32 字节哈希摘要来创建的:

  • For each entity the following attributes must be equal: name, parent, isAbstract, and properties. className, userInfo, and validation predicates are not compared.

  • For each property in each entity, the following attributes must be equal: name, isOptional, isTransient, isReadOnly, for attributes attributeType, and for relationships destinationEntity, minCount, maxCount, deleteRule, and inverseRelationship. userInfo and validation predicates are not compared.

Apple ref

从技术上讲,如果您不更改任何不影响版本号的内容,则无需对模型进行版本控制。请注意,您的更改会影响版本号,因此您需要采取行动。

关于ios - 在没有打开版本控制的情况下更改核心数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733085/

相关文章:

objective-c - Xamarin 将 objective-c 库绑定(bind)到 C# 委托(delegate)和事件

ios - 确定 NSDate 是否在今天在 NSPredicate 中

ios - 谷歌地图不加载内容 swift 4

ios - Gmail 集成时出现链接器错误

ios - 将 UIImageView 从 A 移动到 B

objective-c - Objective-C 对象的列表选择器

objective-c - 清空核心数据 NSSet(多个关系)

iphone - 核心数据获取最后 50 个对象?

ios - 在 Windows 上为 iOS 设备开发 Unity 游戏

objective-c - #define 语句在 Objective-C 中的正确位置