我有2个领域对象类AlertRSM和AlertRSMList包含属性
class 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
请建议我帮助将不胜感激:-)
您需要使用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 docs:开始
领域模型属性必须具有@objc动态var属性,成为基础数据库数据的访问者。
存在三个例外:LinkingObjects,List和领域可选。这些属性不能声明为动态的,因为通用属性无法在Objective-C运行时中表示,用于动态分配动态属性。这些属性应该总是用let声明。