【问题标题】:Core Data rollback to an older model versionCore Data 回滚到旧模型版本
【发布时间】:2020-07-23 11:39:32
【问题描述】:

假设我有一个核心数据模型版本 A,并且最近添加了一个更新的版本 B,其中包含一些新的实体和属性。我基于它们构建了新功能并将其发布到 App Store。现在由于某种原因我需要回滚更改,实现此目的的最佳方法是什么?我能想到的一种方法是添加一个较新的模型版本(版本 C),其中最近添加的实体和属性已通过相应的代码清理删除。或者我可以删除版本 B 并将版本 A 重置为当前版本吗? Core Data 是否能够毫无问题地从版本 B(现已从模型中消失)迁移回 A?请注意,当我从版本 A 迁移到 B 时,Core Data 的轻量级迁移起作用了,因为这些只是实体/属性的简单添加。

【问题讨论】:

  • 不确定是否要回滚更改。我可能会考虑使用旧模型 (A) 设置第二个持久存储。比您可以将原始 (B) 存储数据迁移到新 (A) 存储。迁移完成后,您可以移除原来的升级商店。

标签: ios core-data


【解决方案1】:

你必须制作一个版本 C - 即使它与版本 A 相同。你不应该太担心有很多模型版本(在合理范围内)。它们不会为应用程序占用太多空间,也不会给代码增加太多复杂性。如果每次转换都有效,那么 Core-data 可以将任何版本转换为您的最新模型。使用版本 A 模型的人迁移到 B 只是为了“返回”到 C 可能看起来有点奇怪,但对于简单而有效的模型迁移来说,这是一个很小的代价。

【讨论】:

  • 谢谢乔恩。我通过将当前版本设置回 A(不添加 C)进行了测试,Core Data 似乎可以毫无问题地执行轻量级迁移回 A。迁移到 C 是更好的做法还有其他原因吗?
  • 添加另一个版本时会发生什么?您希望数据迁移保持一致且易于理解。
  • 技术上没问题,我可以基于A而不是B添加一个新的版本C'。我想这里的担心更多是为了让自己或将来的其他开发者感到困惑?
  • 也许吧,现在我不确定了。我可以想象这样一种情况,然后模型转到 A->B->C->A,其中 A->B 和 B->C 有一个简单的迁移,但 C->A 转换没有明确定义。我不知道。
猜你喜欢
  • 2013-10-08
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-17
相关资源
最近更新 更多