我有一个 iOS 应用程序,它使用 Core Data 和 CloudKit,并且我已经达到了需要改进架构并迁移现有数据的地步。
我需要的是添加一个新实体,它与现有实体是一对多的关系。这可以通过轻量级迁移轻松完成。
首次启动架构时,我需要为新实体创建 1 个条目并将其与所有现有的相关实体链接。
我找到的解决方案是在我的代码中保留数据迁移的集合,并在我的架构中拥有一个专用的Migration实体来存储已执行的迁移的日志。
这在大多数情况下都有效,除非用户在 CloudKit 中有一些数据尚未与设备同步。在这种情况下,我只会在本地数据上运行迁移,当新数据来自同步时,它不会被迁移。
我已经考虑过监听
NSPersistentCloudKitContainer.eventChangedNotification
,但至少据我所知,这些通知没有足够的数据来确定所有实体的同步是否完成,而且我使用这种方法还没有成功。
我有哪些方法可以解决这个问题?
我最终所做的是放弃拥有一个只运行一次的正确迁移列表。
我编写了迁移,以便它们可以运行多次并执行它们:
为了管理在 CloudKit 同步之前执行的迁移创建的重复项,我有一些重复数据删除迁移,它们也与其他迁移一起运行。