无法存储列表-Realm Swift

时间:2018-10-09 12:53:50

标签: ios swift realm

我正在尝试在药物治疗表和副作用表之间建立一对多的关系。 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 :(得分:0)

也许是因为yYou声明列表是“不可变的”,也许是因为您的列表是结构,因此返回了副本。

let medToSideEffect = List<SideEffect>()

因此无法更改。试试(警告未经测试的代码)

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

并添加一个功能

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

“公共私有(设置)”位意味着该列表在外部可见,但只能由拥有的类实例进行修改。

答案 1 :(得分:0)

编辑: https://stackoverflow.com/a/52704564/6700116 找到了解决方案。

转到目标Build Settings并将Reflection Metadata Level标志设置为All

这里讨论了这个问题。 https://github.com/realm/realm-cocoa/issues/5944#issuecomment-426948127