0

在几种情况下,我必须更新一些对象模型,包括我用作主键的属性。

例如 :

  • 合并主键name (例如 Georges、Anna...)familyName (例如 Johnson、Smith...)属性,并使用新合并的name (例如 Georges Johnson...)作为主键。
  • 使identifier主键从类型Int到类型String

但当然,文档明确指出:

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

您始终可以删除旧对象并创建新对象,但这会增加重新创建关系的复杂性。

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

所以我想知道是否有更简单的方法可以做到这一点,或者我是否必须做大量的手动工作才能实现我非常简单的目标。

4

1 回答 1

3

来自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),如果你不紧急,请等待下一个版本的bug修复。

于 2017-06-13T17:23:15.477 回答