在Core Data中设置父子关系

时间:2013-03-05 19:08:02

标签: ios core-data relational-database nsmanagedobject

我试图在核心数据中建立关系。我有一个树木列表,每棵树都有一个水果列表。所以我有一个Tree实体和一个Fruit实体。

在代码中,我想在表格视图中列出树。当您单击树时,它应该显示在该树上生长的水果列表。

如何建立这种关系?我是否需要为Fruit提供一个名为tree的属性?如何在代码中设置关系,例如,当我创建Fruit时,如何将其与给定的Tree相关联?

1 个答案:

答案 0 :(得分:17)

马戏团,

这很简单。首先,您的模型应如下所示(为简单起见,我跳过了属性)。

enter image description here

在这种情况下,Tree可以有零个或多个Fruit s(请参阅fruits关系)。相反,Fruit具有tree关系(反比关系)。

特别是,fruits关系应如下所示

enter image description here

在这里,您可以看到已经设置了多对多关系。 删除规则表示如果删除树,其果实也将被删除。

tree关系类似于以下

enter image description here

这是一对一的关系,因为水果只有在附着到树上才能存在。未设置可选标志。因此,当您创建水果时,您还需要指定其父级(在本例中为树)。 Nullify 规则意味着当您删除水果时,Core Data不会删除与该水果相关联的树。它只会删除您指定的水果。

创建Fruit实体时,您应该遵循类似的路径

NSManagedObject *specificFruit = [NSEntityDescription insertNewObjectForEntityForName:@"Fruit" inManagedObjectContext:context];
[specificFruit setValue:parentTree forKey:@"tree"];

或者如果你有创建NSManagedObject子类:

Fruit *specificFruit = [NSEntityDescription insertNewObjectForEntityForName:@"Fruit" inManagedObjectContext:context];
specificFruit.tree = parentTree;

希望有所帮助。

P.S。检查代码,因为我写的没有Xcode支持。