在 iOS Core Data 中映射嵌入对象
Posted
技术标签:
【中文标题】在 iOS Core Data 中映射嵌入对象【英文标题】:Mapping embedded objects in 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 时,我应该如何处理这种情况?
【问题讨论】:
【参考方案1】:创建一个Person
实体,它与to-many
实体具有to-many
(如果只有一个电话#,则为一对一)关系。Phone
实体将与 Person
实体具有一对一关系。
此外,它将具有您描述的内部结构(国家代码、区域代码、编号)。
您不需要 id
属性来创建 CoreData 实体。
您可以将关系设置为“级联”,这样当一个人被删除时,所有相关的电话号码都会被删除。
当您遍历 JSON 响应时,将“电话”键读入 Phone
实体,并将其 person
属性读入当前正在遍历的人。
【讨论】:
听起来正确。 id 是否完全可选,即使将实体保存到持久存储也是如此? (例如,我将 Person 及其电话一起保存)。谢谢! CoreData 不提供使给定属性唯一化的自动方式。唯一保证唯一的是托管对象的objectID
属性。 objectID
属性由 CoreData 管理,您无法自行更改。当您保存时,实体将被赋予一个永久的objectID
,无论您在这些对象上设置的属性如何。
非常感谢,这很有帮助!以上是关于在 iOS Core Data 中映射嵌入对象的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 上使用 Core Graphics 在 PDF 中嵌入超链接
我应该如何释放一个嵌入的 Core Foundation 对象?