使用CloudKit时如何处理数据迁移?

问题描述 投票:0回答:1

一般问题

我有一个 iOS 应用程序,它使用 Core DataCloudKit,并且我已经达到了需要改进架构并迁移现有数据的地步。

架构变更

我需要的是添加一个新实体,它与现有实体是一对多的关系。这可以通过轻量级迁移轻松完成。

数据变更

首次启动架构时,我需要为新实体创建 1 个条目并将其与所有现有的相关实体链接。

我找到的解决方案是在我的代码中保留数据迁移的集合,并在我的架构中拥有一个专用的Migration实体来存储已执行的迁移的日志。

这在大多数情况下都有效,除非用户在 CloudKit 中有一些数据尚未与设备同步。在这种情况下,我只会在本地数据上运行迁移,当新数据来自同步时,它不会被迁移。

失败的方法

我已经考虑过监听

NSPersistentCloudKitContainer.eventChangedNotification
,但至少据我所知,这些通知没有足够的数据来确定所有实体的同步是否完成,而且我使用这种方法还没有成功。

问题

我有哪些方法可以解决这个问题?

swift core-data cloudkit core-data-migration
1个回答
0
投票

我最终所做的是放弃拥有一个只运行一次的正确迁移列表。

我编写了迁移,以便它们可以运行多次并执行它们:

  • 发布时
  • CloudKit 状态通知停止后

为了管理在 CloudKit 同步之前执行的迁移创建的重复项,我有一些重复数据删除迁移,它们也与其他迁移一起运行。

© www.soinside.com 2019 - 2024. All rights reserved.