1

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

这种理解来自讨论 NSPersistentCloudKitContainer(我正在使用的)的这篇博客。

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

4

1 回答 1

0

如果您的模型没有版本控制,那么最佳实践似乎是等待使用模型的新部分,直到有足够多的人对其进行更新。这是假设您正在使用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应该对生产中的现有用户没有影响。

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

来源

于 2021-01-17T19:06:04.253 回答