2017-09-04 78 views
0

我已2境界对象类AlertRSM和AlertRSMList包含属性转换领域列表<objects>到阵列[bojects]

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>() 
} 

我已经在境界DB数据,并获取像

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

print(alertList[0].alertType) 

我得到无印刷

nil 

请建议我 帮助将不胜感激:-)

回答

1

您需要声明使用dynamic关键字是可以作为存储领域的领域模型类的所有实例属性属性。这是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和 RealmOptional。这些属性不能被声明为动态的,因为 通用属性不能在Objective-C运行库中表示, 用于动态分配动态属性。这些 属性应该始终用let声明。

+0

谢谢@DávidPásztor。现在它工作正常 –