【问题标题】:Mapping embedded objects in iOS Core Data在 iOS Core Data 中映射嵌入对象
【发布时间】:2013-07-04 02:07:15
【问题描述】:

假设有一个 Web 服务返回如下 JSON 响应:

{
   "id": "123",
   "name": "John Doe",
   "phone": {
      "country_code": "1",
      "area_code": "11",
      "number": "55544433"
   }
}

这是描述一个 Person 实体,但在这个实体内部,有一个包含嵌入对象的 phone 属性。

Phone 不是实体,它没有被 id 引用,它完全包含在这个 Person 实体的范围内。但是,最好将它映射到我的代码中的电话@interface(例如,它可能有一个方法“formatAsString”,它返回如下格式的字符串:“+1 (11) 55544433”)

在将模型映射到 iOS Core Data 时,我应该如何处理这种情况?

【问题讨论】:

    标签: ios json core-data value-objects embedded-object


    【解决方案1】:

    创建一个Person 实体,它与to-many 实体具有to-many(如果只有一个电话#,则为一对一)关系。
    Phone 实体将与 Person 实体具有一对一关系。
    此外,它将具有您描述的内部结构(国家代码、区域代码、编号)。

    您不需要 id 属性来创建 CoreData 实体。

    您可以将关系设置为“级联”,这样当一个人被删除时,所有相关的电话号码都会被删除。

    当您遍历 JSON 响应时,将“电话”键读入 Phone 实体,并将其 person 属性读入当前正在遍历的人。

    【讨论】:

    • 听起来正确。 id 是否完全可选,即使将实体保存到持久存储也是如此? (例如,我将 Person 及其电话一起保存)。谢谢!
    • CoreData 不提供使给定属性唯一化的自动方式。唯一保证唯一的是托管对象的objectID 属性。 objectID 属性由 CoreData 管理,您无法自行更改。当您保存时,实体将被赋予一个永久的objectID,无论您在这些对象上设置的属性如何。
    • 非常感谢,这很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2013-08-01
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    相关资源
    最近更新 更多