2017-09-04 77 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。現在它工作正常 –