Хранение общего подкласса в Realm - PullRequest
0 голосов
/ 14 марта 2019

Я пытался немного абстрагировать свои модели Realm, поэтому я хотел создать модель суперкласса с универсальным типом.Затем создайте подклассы для определенного типа.

Я знаю, что Realm не поддерживает хранение универсального типа.Тем не менее, мой вопрос:

Можно ли сохранить определенный определенный подкласс?

Итак, идея заключается в том, чтобы иметь суперкласс:

class SuperClass<T: RealmCollectionValue> : Object {

    @objc dynamic var pk: String = ""
    let listProp = List<T>()

    convenience init(pk: String){
        self.init()
        self.pk = pk
    }

    override static func primaryKey() -> String? {
        return "pk"
    }

}

Затем реализовать конкретныйподкласс:

class StringSubClass : SuperClass<String> {}

Есть ли тогда возможность сохранить в Realm экземпляры StringSubClass (как на самом деле, это не универсальный)?

Из того, что у меня естьнайденный в этом уже отвеченном вопросе (который возможен с принятым ответом): Хранить конкретный родовой подкласс в Сфере

Вы можете указать Сферу, чтобы игнорировать Суперкласс определив его для обработки только StringSubClass .

Однако при попытке его в Realm 3.13.1 с помощью:

let realm = try! Realm(configuration: Realm.Configuration(objectTypes: [StringSubClass.self]))

try! realm.write {
    realm.add(StringSubClass(pk: "mypk"))
}

При сохранении возникает следующее исключениеэкземпляры StringSubClass

Terminating app due to uncaught exception 'RLMException', reason: 'Object type 'StringSubClass' is not managed by the Realm. If using a custom `objectClasses` / `objectTypes` array in your configuration, add `StringSubClass` to the list of `objectClasses` / `objectTypes`.'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...