Realm迁移中的主键更新

时间:2017-06-09 07:14:21

标签: swift realm realm-migration

我有几种情况需要更新一些对象模型,包括我用作主键的属性。

例如:

  • 合并主键name (例如Georges,Anna ......)familyName (例如Johnson,Smith ......) property,并使用新合并的name (例如Georges Johnson ......)作为主键。
  • identifier类型生成Int主键,以键入String

但当然文件明确指出:

  

将具有主键的对象添加到Realm后,无法更改主键

您可以随时删除旧对象并创建新对象,但这会增加很多复杂性来重新创建关系。

我非常确定领域可能不会对identifier类型更改感到满意(从我遇到的抛出异常来判断)。

所以我想知道是否有更简单的方法,或者我是否必须做很多手动的咕噜咕噜工作来实现我非常简单的目标。

1 个答案:

答案 0 :(得分:2)

来自Realm的Katsumi。 Realm支持主键迁移。 只能在迁移期间更改主键。因此,您希望更改现有的主键值,可以编写迁移块,然后可以为每个新对象分配新值。当然,这些值必须是唯一的。

let config = Realm.Configuration(schemaVersion: 1, migrationBlock: { (migration, schemaVersion) in
    migration.enumerateObjects(ofType: "Person", { (oldObject, newObject) in
        newObject!["key"] = ...
    })
})

您也可以更改主键类型。 在这种情况下,您还需要编写一个迁移块并分配新值。因为更改类型时会清除主键属性。此外,您可以合并或拆分现有的主键属性。您可以添加新属性,然后将其指定为主键,然后您还应编写迁移块并分配新的唯一值。

然而,最新版本的Realm(2.8.0和2.8.1)产生了无意的错误,即使在迁移过程中也不允许修改主键。因此,如果您是紧急的,您应该使用以前的版本(2.7.x),如果您不紧急,请等待下一版本中的错误修复。