【发布时间】:2016-03-02 11:32:50
【问题描述】:
我目前正在使用 Ensembles 进行一些测试,特别是测试 Core Data 轻迁移。
我目前的配置如下:
- Device-A 使用数据模型 1 运行我的应用程序
- Device-B 使用数据模型 2 运行我的应用程序
- 数据模型 2 基于数据模型 1,并带有一个额外的字符串属性,该属性是可选的
我的场景如下:
- 一开始,我在 Device-A 和 Device-B 上使用数据模型 1 运行我的应用程序,一切都使用 Ensembles(iCloud 配置)进行了很好的同步
- 在设备 B 上,使用数据模型 2 安装并运行我更新的应用程序
- 在 Device-A 上,继续使用数据模型 1 运行我的旧应用,并添加新记录
- 结果:在Device-A上添加的新记录上传到iCloud,然后同步到Device-B
我的问题:我可以配置 Ensembles 以防止它上传更改到 iCloud,以防相关数据模型不是最新的? (即在我的例子中,Device-A 基于数据模型 1 上传对象,而 iCloud 已经基于数据模型 2)
提前致谢!
更新 1:
Drew,非常感谢您的回答。我绝对同意不能(也可能不应该)阻止上传,因为 Ensembles 是一个去中心化的点对点系统。
在理想情况下,我希望具有新数据模型的设备会忽略基于旧数据模型的数据。 (与现有行为类似,旧数据模型的设备将忽略基于新数据模型的任何数据)。支持吗?
如果不是,请以以下场景为例:
- 旧数据模型有一个名为“Book”的实体,它有两个属性:标题和作者(这两个字段都是非可选的)
- 新数据模型有一个名为 titleFirstLetter 的新可选属性,该属性应保存标题字段的第一个字母。
目前,当不涉及 Ensembles 时,我可以完全控制将新的 NSManagedObject 保存到持久存储。因此,我负责添加新书的应用程序的更新代码将确保从标题字段中提取第一个字母并将其保存到新的 titleFirstLetter 属性中。 (即保存图书时,标题为 Catch-22 的图书的 titleFirstLetter 属性中将包含 C)。
另外,当核心数据栈发生轻迁移时,我检测到这一点,并执行一次性程序,迭代数据库中所有现有书籍,并根据标题值设置titleFirstLetter。从现在开始,数据库是一致且有效的,而新代码将确保以后添加到数据库中的书籍将保持数据库有效。
关于 Ensembles,如果我无法控制来自具有旧数据模型的设备的旧数据,如果我的代码从未被调用,我该如何填充 titleFirstLetter 的新属性?
感谢您的热心帮助!
【问题讨论】:
标签: ios objective-c iphone core-data ensembles