gpt4 book ai didi

swift - Realm 迁移中的主键更新

转载 作者:行者123 更新时间:2023-11-28 12:22:19 25 4
gpt4 key购买 nike

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

例如:

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

当然,文档明确指出:

Once an object with a primary key is added to a Realm, the primary key cannot be changed

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

而且我很确定 realm 可能不满意 identifier 类型的任何一种改变(根据我遇到的抛出的异常来判断)。

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

最佳答案

这里是来自 Realm 的 Katsumi。 Realm 支持主键迁移。主键只能在迁移期间更改。所以你想改变现有的主键值,你可以编写迁移 block ,然后你可以为每个新对象分配新值。当然,这些值必须是唯一的。

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

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

但是,最新版本的 Realm(2.8.0 和 2.8.1)产生了一个无意的错误,即使在迁移期间也不允许修改主键。所以如果你紧急,你应该使用以前的版本(2.7.x),如果你不紧急,请等待下一个版本修复错误。

关于swift - Realm 迁移中的主键更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44451579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com