2011-05-10 30 views
4

目前我需要设置一个使用以下结构的数据库。CoreData数组

  • 项目1
    • 对象A
      • 东西A1
      • 东西A2
      • 东西A3
    • 对象B
      • 东西B1

我首先想到的是要建立3个实体,一个“项目”,“对象”和“东西”,然后在每一个阵列。 因此,每个“Item”都有一个包含“objects”的数组,每个object都有一个“stuff”数组。

这会是一个好方法吗?如果不是,那么完成相同任务的更正确和有效的方式是什么?

+1

你应该使用**对多关系**。 – akashivskyy 2011-05-10 18:25:20

+0

真棒,只是得到它的工作。如果你添加这个作为答案和简短的描述,我会接受它。 – 2011-05-10 19:07:18

回答

4

在theese情况下,当你有2个实体和你想拥有它们之间的关系,你应该尝试CoreData的关系。在这种情况下,您应该使用对多关系

PS:不要忘记选择你的关系删除规则! :)

4

您的创建3个实体的方法是正确的。这些实体之间的连接是Core Data所称的关系。你需要注意的是核心数据只处理无序关系。所以对象A将不会得到NSArray东西,它将有一个NSSet东西

如果需要排序,则需要使用子实体的属性进行排序,并使用NSFetchRequest来获取这些对象。例如,对某些“名称”或“日期”属性进行排序。

+0

如果我创建新的可变形属性并存储NSSet,我不应该遇到任何问题? – 2011-05-10 18:33:14

+0

您可以使用符合'NSCoding'协议的任何类作为可转换属性。所有集合类都符合编码标准,只要确保您粘在其中并用于密钥的对象也是如此。 – PeyloW 2011-05-10 18:42:43

+0

如果你实现了一个'NSValueTransformer'子类,它可以将实例转换为'NSData'或从'NSData'转换,那么任何其他类都可以用于可变形属性。但是这是一个非常复杂的任务,坚持使用符合NSCoding的类可以覆盖99%的所有需求。 – PeyloW 2011-05-10 18:45:24