我有2个包含属性
的领域对象类AlertRSM和AlertRSMListclass AlertRSM : Object{
var alertType : String?
var alertTypeValue : String?
var period : String?
var colorValue : String?
var tableName : String?
}
class AlertRSMList: Object {
dynamic var companyAlt_Key :String?
dynamic var dbEntryDate :String?
var arrayOfAlertRSM = List<AlertRSM>()
}
我已经在领域数据库中拥有数据,并且像
一样获取它let alertRSMList = realm.objects(AlertRSMList.self)
let selectedAlertRSMList : [AlertRSMList] = alertRSMList.filter { alertRSM in
return alertRSM.companyAlt_Key == _companyAlt_Key
}
我在selectedAlertRSMList中获取记录。现在我想得到AlertRSM数组形式selectedAlertRSMList,因为我做了以下
if selectedAlertRSMList.count > 0 {
/*var alertRSM = [AlertRSM]()
let alertList = selectedAlertList[0].arrayOfAlertRSM
for item in alertList {
alertRSM.append(item)
}
// print(alertRSM.count) // here I am getting 9 count but all items are nil
*/
let alertList = selectedAlertList[0].arrayOfAlertRSM
print(alertList) // I am getting all records
print(alertList[0].alertType)// here I am getting nil but that is exist in alertList and also printed by print(alertList)
}
通过打印alertList
print(alertList)
我正在获得像
这样的记录List<AlertRSM> <0x6000002e0500> (
[0] AlertRSM {
alertType = Financial;
alertTypeValue = 37.0;
period = W;
colorValue = 008000;
tableName = Alert;
},
[1].....so on
但是当我试图打印时
print(alertList[0].alertType)
我正在打印
nil
请建议我 帮助将不胜感激: - )
答案 0 :(得分:1)
您需要使用dynamic
关键字声明Realm模型类的所有实例属性,以用作存储的Realm属性。这是Objective-C互操作性所必需的,因为Realm框架使用Obj-C运行时环境。
将所有属性声明为dynamic
后,您的代码就可以正常运行。
class AlertRSM : Object {
dynamic var alertType : String?
dynamic var alertTypeValue : String?
dynamic var period : String?
dynamic var colorValue : String?
dynamic var tableName : String?
}
如果您在类的实例上运行代码而不是在Realm中持久存在,则可以清楚地看到问题。在那些,您的代码完美地工作,因为它们不是通过Obj-C运行时访问的。只要您持久保存模型对象,就可以看到问题。
Realm模型属性必须具有@objc动态var属性 成为底层数据库数据的访问者。
这有三个例外:LinkingObjects,List和 RealmOptional。这些属性不能声明为动态,因为 通用属性无法在Objective-C运行时中表示, 用于动态分配动态属性。这些 应始终使用let声明属性。