0

我在我们的 iOS 和 Android 应用程序中使用领域。出于某种原因,我想重命名我的领域对象之一。

最初我们命名对象Demo,现在我想将其更改为RealmDemo

在android中,我们通过使用@RealmClass 注解来实现它

@RealmClass(name = "Demo")
open class RealmDemo : RealmObject() {
}

在 iOS 方面,我不确定我如何能像在 android 中那样做类似的事情。

class RealmDemo: Object {
    override static func className() -> String {
        "Demo"
    }
}

我在上面尝试过 ^ 但收到以下错误“由于未捕获的异常'RLMException'而终止应用程序,原因:'对象类型'Demo'不由领域管理'”

4

2 回答 2

0

似乎领域不支持可可/ios 的类名覆盖。

https://github.com/realm/realm-cocoa/issues/2194

https://github.com/realm/realm-cocoa/issues/6624

于 2021-05-27T15:48:40.753 回答
0

两件事情。

首先,您可以随意命名对象并随时更改其名称。

然而,这是一个破坏性的变化,Realm 没有任何方法可以知道新命名的对象与先前的对象“是同一个对象”。

如何处理取决于用例是什么:

  1. 如果这是一种开发情况,请删除您的本地 Realm 文件并运行该应用程序,将自动创建具有新名称的对象。
  2. 如果这是生产,则需要一个迁移块(就像在任何平台上一样)将数据从旧对象迁移到新对象。

其次,另一个重要的事情是对象的名称 now RealmDemo,而先前的对象是Demo

class RealmDemo: Object {

所以从技术上讲,它们是两个独立的对象。对于 Realm,您已经完全放弃了 Demo 对象,这是一个破坏性的变化。Demo 仍然存在,但未在您的代码中引用,因此会引发错误

在一个可能不相关的注释中,className 函数引用了 Demo

override static func className() -> String {
   "Demo"
}

但对象名称是 RealmDemo。

目前尚不清楚为什么该className功能存在,但它不是必需的或真正需要的。请参阅对象的文档以了解它们的结构 - 它们可能需要主键

于 2021-05-27T15:10:51.523 回答