如何在iOS中重命名领域对象



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

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

在android中,我们使用@RealmClass注释实现了这一点

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

在iOS方面,我不确定我到底如何才能像在android中一样做到这一点。

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

我尝试了上面的^,但得到了下面的错误";由于未捕获的异常"RLMException"而终止应用程序,原因:"对象类型"Demo"不由Realm管理";

两件事。

首先,您可以随心所欲地命名对象,并随时更改其名称。

然而,这是一个破坏性的变化,Realm无法知道新命名的对象与之前的对象"是同一个对象"。

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

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

其次,另一件重要的事情是对象的名称现在是RealmDemo,而之前的对象是Demo

class RealmDemo: Object {

所以从技术上讲,这是两个独立的物体。对于Realm,你已经完全放弃了Demo对象,这是一个破坏性的改变。Demo仍然存在,但在您的代码中没有引用,因此抛出了一个错误

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

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

但对象名称是RealmDemo。

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

似乎realm不支持为cocoa/ios重写className。

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

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

最新更新