"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”,并解决了长名称问题。
我在将一些代码移入框架后收到“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”,并解决了长名称问题。