在Core Data中模拟数组类型属性的最佳方法是什么?

时间:2010-08-06 15:57:37

标签: core-data data-modeling

我有一个联系人列表,每个联系人都有几封电子邮件。

我应该创建一个Contact核心数据实体和一个Email实体,并将多个电子邮件对象链接到一个联系人对象吗?或者我应该采用另一种方式,例如连接所有电子邮件并将它们存储为一个大字符串?

处理这种配置的最干净,最有效的方法是什么?

由于

3 个答案:

答案 0 :(得分:1)

始终将Core Data视为对象图并相应地对数据建模。

您应该有一个联系人实体和一个电子邮件实体。电子邮件应该与Contact的一对多双向关系的另一端。如果您关心特定订单,那么您还应该在电子邮件实体中有一些可订购的值,以便以后进行排序。

答案 1 :(得分:0)

  

我应该创建联系人CoreData实体和电子邮件实体,并将多个电子邮件对象链接到一个联系人对象吗?

这个解决方案听起来很合理。仍然不是“数组类型属性”,因为许多关系是无序集而不是有序数组。

答案 2 :(得分:0)

您的实体图形看起来像(伪代码):

Contact{
    name:string
    emailAddress:string
    //...other attributes of contacts
    emails<--(optional,cascade)-->>Email.contact
}

Email{
    from:string
    // ... other attributes of emails
    contact<<--(required,nullify)-->Contact.emails
}

在实体(摘要)和对象(具体)图表中,您只需要将联系人链接到他们的电子邮件,而无需任何特定顺序。您不必担心在实体图中排序关系,因为您希望显示对象的顺序可能会随时改变。该顺序由每个特定提取请求的排序描述符确定。获取请求将按您定义的任何顺序返回一个数组。例如,有一次您希望按收到的日期排序电子邮件,另一次按照其他时间按其他属性排序。你甚至可以使用fetch返回的数组来获得你想要的顺序。

您只是想确保实体具有捕获您要排序的信息的属性。

非常罕见的情况 中,实体图本身绝对需要某种类型的排序,您应该为实体本身添加一个排序属性并编写自定义用于维护排序顺序的代码。