0

将一些代码移入框架后,我收到“表名太长”错误。在通过堆栈跟踪后,在创建模式时中断以获取表名,然后手动尝试创建更长的表名。我已经确定了有问题的名称。有问题的表名是链接表,Realm 中有没有办法使用 className() 或其他链接表来强制该表的名称?

引发的领域错误的屏幕截图。 在此处输入图像描述

4

1 回答 1

0

经过进一步调查,事实证明解决此问题的方法是在我的应用程序中创建该类型的子类。由于我的代码的结构,Realm 使用提交的类名、包名和泛型类型创建表名。这使得名称太长了。当您在实际应用程序中使用显式泛型类型对类型进行子类化时,Realm 不再需要担心包名称或泛型名称。下面应该有助于说明问题和解决方案。

class PackageA.One<I>: RealmSwift.Object {
   var List<I> = List<I>()
}

class App.Two: RealmSwift.Object {

}

let realmObjectsToRegister = [Package.One<App.Two>.self]

以上导致 Realm 创建了一个表名“ TtGC11PackageA9OneC9App18Two ”,但我的应用程序中的真实姓名使其超过 57 个字符(最大表名长度)。

通过执行以下操作,我缩短了名称并解决了问题

class PackageA.One<I>: RealmSwift.Object {
   var List<I> = List<I>()
}

class App.Two: RealmSwift.Object {

}

class App.AppOne: PackageA.One<App.Two> {}

let realmObjectsToRegister = [App.AppOne.self]

然后,该解决方案导致领域将表命名为“AppOne”,并修复了长名称问题。

于 2020-12-18T22:50:55.317 回答