Невозможно сохранить списки - Realm Swift - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь создать взаимосвязь между таблицей лекарств и таблицей побочных эффектов.RealmObject - это пользовательский класс, созданный из Object класса.

Определения модели:

class Medication: RealmObject {

    @objc dynamic var name : String?
    @objc dynamic var form : String?
    @objc dynamic var id : String?

    let medToSideEffect = List<SideEffect>()

    override class func primaryKey() -> String? {
        return "id"
    }
}


class SideEffect: RealmObject {

    @objc dynamic var masterSideEffectId : String = ""
    @objc dynamic var entityType : String = ""
    @objc dynamic var entityId : String = ""
    @objc dynamic var sideEffect : String = ""
    @objc dynamic var id : String = ""
    @objc dynamic var uniqueId : String = ""

    override class func primaryKey() -> String? {
        return "uniqueId"
    }
}

Тестовый код:

let medicationItem = Medication(dict: medication)

let sideEffectItems = List<SideEffect>()
for sideEffect in sideEffectList {
    let sideEffectItem = SideEffect()
    sideEffectItem.id = self.getMongoId()
    sideEffectItem.entityType = "Medicine"
    sideEffectItem.entityId = medicationItem.id!
    sideEffectItem.sideEffect = (sideEffect as? String)!
    sideEffectItem.uniqueId = "\(medicationItem.id!)_\(((sideEffect as? NSString)?.replacingOccurrences(of: " ", with: "_"))!)"

    sideEffectItems.append(sideEffectItem)
    medicationItem.medToSideEffect.append(sideEffectItem)
}

После этого процесса, когда явыведите medicationItem, Вывод такой:

Medication {
    name = Paracetomol 650mg;
    form = tab;
    id = 5af96e79efb27f6bd5c25a66;
}

Предполагалось, что побочные эффекты будут добавлены к объекту лекарства.но это уже не так.До последнего обновления Realm 3.11.0 работало нормально.

Пожалуйста, дайте мне знать, если код неправильный.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

РЕДАКТИРОВАТЬ: https://stackoverflow.com/a/52704564/6700116 Нашли решение.

Перейдите к своей цели Build Settings и установите флаг Reflection Metadata Level на All

Проблема обсуждается здесь.https://github.com/realm/realm-cocoa/issues/5944#issuecomment-426948127

0 голосов
/ 09 октября 2018

Может быть, потому что вы объявляете свой список как «неизменяемый», а может быть потому, что ваш список является структурой и, следовательно, возвращается копия.

let medToSideEffect = List<SideEffect>()

И поэтому его нельзя изменить.Попробуйте (предупреждая непроверенный код)

public private(set) var medToSideEffect = List<SideEffect>()

и добавьте func

public func append(sideEffect: SideEffect) {
    self.medToSideEffect.append(sideEffect)
}

Бит public public (set) означает, что список виден снаружи, но может быть изменен только с помощьюэкземпляр класса-владельца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...