Я получаю сообщение об ошибке «Слишком длинное имя таблицы» после переноса кода в фреймворк. После прохождения трассировки стека, прерывания для получения имен таблиц при создании схемы, а затем ручного создания более длинных имен таблиц. Я определил проблемное имя. Проблемное имя таблицы - это таблица ссылок, есть ли в Realm способ принудительно указать имя этой таблицы, используя className() или что-то еще для таблицы ссылок?
Скриншот ошибки Realm.
После дальнейшего расследования выясняется, что для решения этой проблемы нужно создать подкласс типа в моем приложении. Из-за того, как был структурирован мой код, 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» вместо этого и устранила проблему с длинным именем.