我正在尝试在药物治疗表和副作用表之间建立一对多的关系。 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更新之前,它运行良好。
如果代码不正确,请告诉我。
答案 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