在核心数据迁移期间填充新的 UUID 属性

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

我意识到我的所有核心数据实体都需要 id 才能通过这些 id 获取。由于

NSManagedObjectID
可以更改,我想添加类型为 UUID 的自定义
id
属性。

可选与非可选 UUID

首先,我计划将 id 添加为非可选 UUID。不过,由于 CloudKit 似乎要求所有属性都是可选的,因此将这个新的 UUID 标记为可选似乎是个好主意(我应该稍后添加 iCloud 同步)。这使得它也有资格进行轻量级核心数据迁移。

如何填充属性?

尽管 id 在核心数据模型中被标记为可选,但我想确保所有实体(现有的和新的)实际上都保存了 id/UUID!

如何在核心数据迁移期间填充新的 UUID 属性? 我必须为此使用手动迁移吗?

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

是的,如果您希望每个对象立即拥有 UUID,则必须为此进行手动迁移。要创建 UUID,您需要在迁移期间运行代码,并且要运行代码,您需要编写自定义迁移策略 - 即

NSEntityMigrationPolicy
的子类。一般过程类似于我在之前的答案中描述的内容。

如果您不需要每个对象立即拥有唯一的 ID,您可以在访问记录时即时执行此操作。一种方法是在 Core Data 子类中实现

awakeFromFetch
。在该函数中,检查对象是否具有 UUID,并在必要时创建一个。然后,当您保存更改时,您将保存 UUID。这可能会更简单,但这也意味着您无法确定每个对象都有一个 UUID。

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