【问题标题】:How to turn NSManagedObject values into a Dictionary with key and value pairs?如何将 NSManagedObject 值转换为具有键值对的字典?
【发布时间】:2018-05-10 13:21:11
【问题描述】:

我在我的应用程序中设置了核心数据,因此当没有互联网连接时,应用程序将在本地保存数据。一旦建立连接,它将触发在线模式,然后我需要将存储在 Core Data 中的数据发送到我的数据库。

我的问题是如何将一个实体变成这样的字典:

<Response: 0x1c0486860> (entity: AQ; id: 0xd000000000580000 <x-coredata://D6656875-7954-486F-8C35-9DBF3CC64E34/AQ/p22> ; data: {
amparexPin = 3196;
dateFull = "\"10/5/2018\"";
finalScore = 34;
hasTech = No;
intervention = Before;
responseValues = "(\n    31,\n    99,\n    82,\n    150,\n    123,\n    66,\n    103,\n    125,\n    0,\n    14\n)";
timeStamp = "\"12:47\"";
who = "Luke";
})

进入这个:

amparexPin: 5123
timeStamp: 10:30
hasTech: No
intervention: Before

基本上是一个字典,我试图对每个实体的每组数据执行相同的操作。我知道这听起来过于复杂,但每个实体都必须通过相同的过滤器/函数,然后将其数据发送到数据库。对此的任何帮助都会很棒!

【问题讨论】:

  • let stuff = Response as? [String: AnyObject] ?

标签: arrays swift dictionary core-data


【解决方案1】:

你可以使用这个功能

func objectAsDictionary(obj:YourObject) -> [String: String] {
    var object: [String: String] = [String: String]()

    object["amparexPin"] = "\(obj.amparexPin)"

    object["timeStamp"] = "\(obj.timeStamp)"

    object["hasTech"] =  "\(obj.hasTech)"

    object["intervention"] =  "\(obj.intervention)"


    return object
}

【讨论】:

    【解决方案2】:

    我看到了两种方法。第一个是有一个带有一些“编码”功能的协议,toDictionary() -&gt; [String, Any?],每个托管对象类在扩展中实现,然后在发送之前在每个对象上调用这个函数。
    这种方式的好处是您可以更精确地控制实体和字典之间的每个映射,缺点是您需要为核心数据模型中的每个实体实现它。

    另一种方法是利用NSEntityDescription 和KVC 在一个函数中提取所有值。此类包含所有属性的字典,attributesByName,可用于使用键值编码提取所有值。根据您是否还需要映射值的数据类型,您可以从 NSAttributeDescription 中获取。 (如果你需要处理人际关系等等,还有propertiesByName)。

    一个简化的例子。 (这里直接写,不保证能编译)

    static func convertToDictionary(object: NSManagedObject) -> [String, Any?] {
        let entity = object.entity
        let attributes = entity.attributesByName
    
        var result: [String: Any?]
        for key in attributes.keys {
            let value = object.valueForKey: key)
            result[key] = value
        }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      相关资源
      最近更新 更多