【问题标题】:Convert realm List<objects> to array[objects]将领域 List<objects> 转换为 array[objects]
【发布时间】:2017-09-04 09:13:36
【问题描述】:

我有 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 中获取记录。现在我想从 selectedAlertRSMList 中获取 AlertRSM 数组,因为我做了以下操作

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

通过打印警报列表

 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

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

【问题讨论】:

    标签: swift3 realm


    【解决方案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 docs:

    领域模型属性必须具有 @objc 动态 var 属性以 成为底层数据库数据的访问者。

    这有三个例外:LinkingObjects、List 和 领域可选。这些属性不能声明为动态的,因为 通用属性不能在 Objective-C 运行时中表示, 它用于动态属性的动态调度。这些 属性应该总是用 let 声明。

    【讨论】:

      猜你喜欢
      • 2016-11-01
      • 1970-01-01
      • 2019-03-15
      • 2018-11-09
      • 2015-02-13
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多