如果我已经发布的 v1 没有版本化核心数据模型,我可以使用“自动轻量级迁移”吗?

2024-01-09

如果我已经发布的 v1 没有版本化核心数据模型,我可以使用“自动轻量级迁移”吗?

如果是,我需要应用的记录步骤是否有任何关键更改?


你不仅可以做到这一点,从某种意义上说,这是你可以做到这一点的唯一方法。来自苹果文档 http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmVersioning.html#//apple_ref/doc/uid/TP40004714-SW8,“要创建版本化模型,您需要从普通模型开始......”

你的 v1 有一个普通的模型。只要您拥有该模型,并且按照该教程中链接的步骤创建版本化模型,轻量级迁移就会起作用 - 如果您的迁移满足通常的轻量级迁移要求。轻量级迁移发生在您的 v2 应用程序中(或 v1.1 或其他应用程序中)。 v1 应用程序中的数据模型本质上没有相关性。 Core Data 需要的是找到新的 v2 应用程序具有与本地设备上的 Core Data 存储中找到的内容相匹配的数据模型副本,并且具有描述您希望如何存储数据的新数据模型从现在开始。如果所需的更改满足轻量级迁移的要求,那么它就会执行。

这些要求是什么?从Apple 关于轻量级迁移的文档 http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweight.html#//apple_ref/doc/uid/TP40008426-SW1:

为了执行轻量级迁移,Core Data 需要能够找到 源和目标管理对象在运行时自行建模。 (Core Data 搜索 NSBundle 的 allBundles 返回的包并 allFrameworks 方法。)然后它必须分析架构更改以 持久化实体和属性并生成推断映射 模型。为了使 Core Data 能够做到这一点,更改必须适合 明显的迁移模式,例如:

• 简单添加新属性
• 非可选属性变为可选
• 可选属性变为非可选,并定义 默认值。

如果重命名实体或属性,您可以设置 将目标模型中的标识符重命名为 源模型中相应的属性或实体。你通常 使用 Xcode 数据建模工具设置重命名标识符(例如 NSEntityDescription 或 NSPropertyDescription 对象)。在 Xcode,重命名标识符位于详细信息的用户信息窗格中 版本哈希修饰符下方的窗格(请参阅 Xcode 中的浏览器视图) 核心数据工具)。您还可以使用在运行时设置标识符 设置重命名标识符:.例如,要处理

• 将实体 Car 重命名为 Automobile,
• 并重命名汽车的颜色 属性为paintColor

您将在之后添加以下代码 加载目标数据模型,并在尝试打开之前 存储文件:

NSEntityDescription *automobile = [[destinationModel entitiesByName] objectForKey:@"Automobile"];
[automobile setRenamingIdentifier:@"Car"];
NSPropertyDescription *paintColor = [[automobile attributesByName] objectForKey:@"paintColor"];
[paintColor setRenamingIdentifier:@"color"];

总之,您没有错过机会,现在使用 Core Data 的这些功能还为时不晚。 :) 为了回答您的具体问题,您不需要对文档中概述的标准步骤进行任何更改。

稍后更新根据您对另一个答案的评论进一步的想法,您说:

所以只是为了确认,我不必在 XCode 中回溯我的核心数据 模型到看起来像 v1 的样子,然后对其进行版本控制?所以我可以 只需在我的位置创建第一个核心数据模型版本 应用程序是 v2 吗?

从你在这里所说的来看,这个问题似乎与最初的问题不同。您最初的问题表明您已经发布了应用程序的 v1,而没有显式添加版本化模型。但是,此声明意味着您已对应用程序 v2 的核心数据模型进行了更改,而无需首先创建版本化数据模型。这是完全不同的事情。

如果是这样的话,那么你的工作就更加困难了。但是,假设您保留源代码的备份或在 git 之类的存储库中管理代码(我建议所有开发人员都这样做),您可以检索所需的内容。如果您已经将核心数据模型更改为 v2,您需要做的是将当前数据模型转换为版本化模型,然后恢复/签出应用程序 v1 的副本,将核心数据模型(*. xcdatamodel 文件)从那里复制到当前项目中,这样您就可以同时拥有 v1 数据模型和较新的数据模型。然后,您将有可能能够使用轻量级迁移,如上所述。

请注意,这里的关键问题是您何时更改数据模型。您的应用程序称为 v1 还是 v2 本质上与问题无关,除了显然您可能在将应用程序的版本号更改为 v2 的同时引入了对数据模型的更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我已经发布的 v1 没有版本化核心数据模型,我可以使用“自动轻量级迁移”吗? 的相关文章

  • UICollectionView 设置列数

    我刚刚开始学习 UICollectionViews 我想知道是否有人知道如何指定集合视图中的列数 默认设置为 3 iPhone 肖像 我查看了文档 似乎找不到简洁的答案 对于 Swift 5 和 iOS 12 3 您可以使用4 以下实现为了
  • 如何从 Xcode 4.5 卸载 iOS 5.0 模拟器

    我已经安装了 Xcode 4 5 由于我编写应用程序是为了好玩 我不打算支持旧版 iOS 版本 并且为了节省 500 GB iMac 上的空间 是否有办法删除它 尝试从 Xcode 包中支持的平台中删除 iPhone iPhoneSimul
  • iOS 确定视频中的帧数

    如果我有一个 Swift 中的 MPMoviePlayerController MPMoviePlayerController mp MPMoviePlayerController contentURL url 有没有办法获取视频中的帧数u
  • 为什么 iPhone 应用程序的 main() 函数没有机会完成?

    考虑以下main 大多数 iPhone 应用程序都采用以下方法 int main int argc char argv NSAutoreleasePool pool NSAutoreleasePool alloc init int retV
  • 更改目录时 Gitlab CI 运行程序作业失败退出状态 1

    我正在使用我的个人机器作为使用 Fastlane 的 iOS 项目的运行程序 这主要是因为共享运行器没有为 iOS 设置 因为它们没有安装 Xcode 更改目录时我的作业立即失败 它是一个 shell 运行程序 根本没有其他自定义配置 有什
  • 如何将 NSMutableArray 添加到 NSMutableArray Objective-c

    我正在从 Java 切换到 Objective c 但遇到了一些困难 我已经搜索过这个问题但没有取得太大成功 我有一个存储 NSMutableArrays 的 NSMutableArray 如何向数组添加数组 您可以在数组中存储对另一个数组
  • Apple 由于崩溃而拒绝了我的应用程序,无法重现它

    我刚刚上传了一个应用程序到应用程序商店 它是为ios 7开发的 他们拒绝了该应用程序 因为我无法重现崩溃 他们向我发送了这份崩溃报告 Exception Type EXC BAD ACCESS SIGSEGV Exception Subty
  • 自定义 UINavigationController UINavigationBar

    基本上我想要一个定制UINavigationBar 我不希望它是 半透明 或任何东西 就像图片应用程序一样 我基本上想完全删除它 但我仍然希望能够在按下导航控制器时添加后退按钮等 并且我想要视图 例如 UITableViewControll
  • 按升序对 NSDictionary 进行排序

    我正在尝试排序NSDictionary按升序排列 我正在使用这段代码 NSDictionary valDict self mGetDataDict key rowKey for NSString valueKey in valDict al
  • iOS - 在相机上放置自定义叠加层(垂直对齐)。顶部黑条的大小

    我正在寻找以下问题的编程解决方案 我想在相机 iOS 上绘制自定义叠加层 我希望它位于相机输出视图的垂直中央 我已经完成了相对于屏幕而不是相机图片居中绘制自定义视图 为此 我需要获得顶部黑条的大小 我怎么才能得到它 顶部和底部栏的大小不相等
  • 依赖于不同队列上的另一个操作的 NSOperation 无法启动

    我有操作的依赖图 并且使用多个队列来组织各种操作流 例如 peopleQueue sitesQueue sessionQueue sessionQueue loginOp fetchUpdatedAccountOp peopleQueue
  • 使用javascript以编程方式触发iOS safari中的复制菜单?

    我正在尝试实现一种用户友好的方式 将一些文本从文本输入字段复制到 iOS Safari 上的剪贴板 我知道无法在这个平台上以编程方式完成此操作 但我希望能够尽可能地指导用户体验 在 iOS Safari 上 当用户手动突出显示某些文本时 会
  • SDK 和 iOS 部署目标。

    我使用最新的 SDK 4 1 构建项目并设置 iOS 部署目标 3 0 如果我使用4 0 sdk的某些方法 我可以在真正的iPhone 3 0上运行我的项目吗 您只能在 OS 3 设备上运行您的项目 如果有条件地编码围绕您想要使用的 OS
  • (XCode 4.0.2) 存档构建(为在应用商店上分发而构建)armv6 警告

    我发誓我即将最终使用 XCode 4 0 2 提交应用程序 但我担心我现在遇到了一个相当陡峭的障碍 无论我做什么 我总是会收到 1 2 个与 armv6 架构相关的警告 我已设置要使用的项目和目标构建设置 架构 标准 armv6 armv7
  • “无法取消归档名为 UITableViewController 的元素”

    我一直在按照 构建你的第二个 iOS 应用程序 教程一步步进行 在教程承诺所有错误都会消失之后 我遇到了这个错误 但直到其他错误都出现后 该错误才出现 全部更正 我尝试编译它 错误 The document MainStoryboard i
  • 如何将设备上未保存的图片上传到dropbox帐户?(IOS)

    Dropbox RestClient 仅保存文件 所以我想先将图像保存在本地文件夹中 然后上传它 结果它保存了文件 但它已损坏 NSString localPath NSBundle mainBundle pathForResource I
  • AdMob 和 DFP 广告联盟之间的区别?

    我正在尝试在我的 iOS 应用程序上显示横幅广告和插页式广告 但现在我对广告网络感到困惑 AdMob 与 DFP 有何不同 哪一种更适合投放广告 有人可以提供帮助吗 提前致谢 AdMob 是一个广告网络 作为发布商 您可以通过展示从网络投放
  • 使用ios sdk在youtube上上传视频的方法[重复]

    这个问题在这里已经有答案了 可能的重复 如何从 iOS 应用程序中将视频上传到 YouTube https stackoverflow com questions 3528568 how do i upload a video to you
  • Swift - 保存在 TableView 中选择的复选标记

    我对 Swift 相当陌生 并且在 TableView 多重选择方面遇到问题 我有多个选择 可以用复选标记进行检查 类似于待办事项列表 当我检查项目时 我希望能够返回 ListView 并保存我的选择 我假设将其保持在已保存状态的代码将位于
  • 隐藏 UITableview 单元格

    我正在尝试从 UITableView 中隐藏单元格 就像删除操作一样 但我只想隐藏它以便稍后在相同位置显示它 我知道 UITableViewCell 有一个名为 隐藏 的属性 但是当我使用此属性隐藏单元格时 它会隐藏但没有动画 并且会留下空

随机推荐