首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >集成与核心数据光迁移

集成与核心数据光迁移
EN

Stack Overflow用户
提问于 2016-03-02 11:32:50
回答 1查看 325关注 0票数 0

我目前正在用组件进行一些测试,特别是测试核心数据光迁移。

我的当前配置如下:

  • 设备--用数据模型1运行我的应用程序
  • 使用数据模型2运行我的应用程序的设备-B
  • 数据模型2基于数据模型1,有一个额外的string属性,这是可选的。

我的方案如下:

  • 一开始,在设备A和设备B上运行数据模型1的应用程序时,一切都使用组件(iCloud配置)进行同步。
  • 在设备-B上,使用数据模型2安装并运行我更新的应用程序。
  • 在设备-A上,继续使用数据模型1运行我的旧应用程序,并添加一个新记录
  • 结果:添加到设备-A上的新记录被上传到iCloud,然后同步到设备-B。

我的问题是:如果相关的数据模型不是最新的,我可以配置组件来防止它将更改上传到iCloud吗?(也就是说,在我的例子中,设备-A基于数据模型1上传对象,而iCloud已经基于数据模型2)

提前感谢!

更新1:

德鲁,非常感谢你的回答。我绝对同意上传不能(也可能不应该)被阻止,因为集群是一个分散的、对等的系统。

在理想的情况下,我希望拥有新数据模型的设备将忽略基于旧数据模型的数据。(类似于现有的行为,旧数据模型的设备将忽略基于新数据模型的任何数据)。这是支持吗?

如果没有,请考虑以下列情景为例:

  • 旧的数据模型有一个名为“Book”的实体,它有两个属性: title和author (这两个字段都是非可选的)
  • 新的数据模型有一个名为titleFirstLetter的新的可选属性,它应该包含标题字段的第一个字母。

目前,当不涉及组件时,当将新的NSManagedObject保存到持久性存储区时,我完全可以控制。因此,负责添加新书的应用程序的更新代码将确保从标题字段中提取第一个字母,并将其保存到新的titleFirstLetter属性中。(也就是说,在保存图书时,名为CATC-22的书将在titleFirstLetter属性中包含C)。

此外,当在核心数据堆栈上发生光迁移时,我会检测到这一点,并执行一次过程,在其中迭代数据库中的所有现有书籍,并根据标题值设置titleFirstLetter。从这一点开始,数据库是一致的和有效的,而新的代码将确保将来添加到数据库的书籍将保持数据库的有效性。

关于组件,如果我无法控制来自具有旧数据模型的设备的旧数据,如果我的代码从未被调用,如何填充titleFirstLetter的新属性?

谢谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-02 14:38:02

你不能阻止它,不。集群是一种分散化的对等系统。实际上,一个设备无法知道另一个设备的当前状态,因此无法阻止上传。

更新后的设备应该能够处理来自其他设备的旧数据。旧模型的设备将忽略基于新模型的任何数据,直到它也被更新。然后,它将合并所有被忽略的数据。

最好在可能的情况下避免迁移,坚持简单的东西,比如添加属性或实体,而不是复杂的重构。如果您需要做大量的更改,可以考虑简单地从一个新的集合开始(例如,更改集成标识符)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35746021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档