【问题标题】:Strategies for handling future schema changes in CloudKit在 CloudKit 中处理未来模式更改的策略
【发布时间】:2020-07-27 08:25:05
【问题描述】:

我对 CloudKit 的理解是,如果用户有两台设备 - 一台具有具有 v2 架构的应用版本,另一台具有 v1 架构 - 具有 v1 架构的设备将接收新数据,但仅适用于v1。在架构 v2 中创建的新字段中的所有新数据都将针对该特定设备被丢弃。稍后,当具有 v1 架构的应用更新为 v2 架构时,在较新版本的应用上生成的 v2 字段中的新数据将不再被拉取,并且两个设备的数据不匹配。

这种理解来自this blog讨论 NSPersistentCloudKitContainer(我正在使用的)。

这显然是一个问题,第一台设备(例如 iPhone)更新应用程序和第二台设备更新应用程序(例如 iPad)之间可能有几天的时间。我可以在架构或实现中部署哪些策略来解决此问题?

【问题讨论】:

  • 作为 2.0 更新的一部分,您可以重新获取所有内容吗?
  • @BrianM 也许我在稀疏文档中遗漏了一些东西,但我什至不确定 NSPersistentCloudKitContainer 是否可行
  • 对不起,我错过了 NSPersistentCloudKitContainer 部分

标签: ios icloud cloudkit nspersistentcloudkitcontainer


【解决方案1】:

如果您的模型没有版本控制,那么最佳做法似乎是等待使用模型的新部分,直到有足够多的人对其进行更新。这是假设您使用的是NSPersistentCloudKitContainer。

假设用户使用的是版本 1,其设备上的 List 实体模型如下所示:

@NSManaged public var dateAdded: Date?
@NSManaged public var id: String?
@NSManaged public var title: String?

在运行版本 2 时,您更改 iCloud 中的生产模型以向 List 实体添加属性:

@NSManaged public var dateEdited: Date? //NEW
@NSManaged public var dateAdded: Date?
@NSManaged public var id: String?
@NSManaged public var title: String?

只要您尚未实现使用新属性的任何功能,他们的应用程序应该可以继续正常运行。

添加像Notes 这样的全新实体应该不会影响生产中的现有用户,直到您实际实现使用该实体的功能。

在使用新的数据模型更改之前等待几个版本应该让人们有足够的时间更新到具有新模型的版本。

来源

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多