"Table name too long" 与 realm-cocoa (Realm DB) 崩溃

"Table name too long" crash with realm-cocoa (Realm DB)

我在将一些代码移入框架后收到“Table 名称太长”错误。通过堆栈跟踪后,中断以获取架构创建中的 table 名称,然后手动尝试创建更长的 table 名称。我确定了有问题的名称。有问题的 table 名称是一个链接 table,Realm 中是否有一种方法可以使用 className() 或其他链接 table 来强制 table 的名称?

抛出 Realm 错误的屏幕截图。

经过进一步调查,发现解决此问题的方法是在我的应用程序中创建该类型的子class。由于我的代码的结构,Realm 使用 class 名称、包名称和提交的通用类型创建了 table 名称。这使得名称太长了。当您在实际应用中使用显式泛型类型 subclass 类型时,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 创建了一个 Table 名称“TtGC11PackageA9OneC9App18Two”,除了我的应用程序中的真实姓名使它超过 57 个字符(最大 table 名字长度).

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

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]

该解决方案导致领域命名为 table“AppOne”,并解决了长名称问题。