【问题标题】:Setting up a parent-child relationship in Core Data在 Core Data 中建立父子关系
【发布时间】:2013-02-20 08:14:37
【问题描述】:

我正在尝试在 Core Data 中建立关系。我有一个树列表,每棵树都有一个水果列表。所以我有一个Tree 实体和一个Fruit 实体。

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

如何建立这种关系?我需要给Fruit 一个名为树的属性吗?以及如何在代码中设置关系,例如当我创建Fruit 时,如何将其与给定的Tree 关联?

【问题讨论】:

    标签: ios core-data relational-database nsmanagedobject


    【解决方案1】:

    太阳,

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

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

    具体而言,fruits 关系应如下所示

    在这里,您可以看到已经设置了一对多关系。 删除规则意味着如果你删除一棵树,它的果实也会被删除。

    tree 的关系如下所示

    这是一对一的关系,因为水果只有附着在树上才能存在。 可选标志未设置。因此,当您创建水果时,您还需要指定其父级(在本例中为树)。 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;
    

    希望对您有所帮助。

    附:检查代码,因为我是在没有 Xcode 支持的情况下编写的。

    【讨论】:

    • 不应该是树有一对多关系而不是结果吗?反过来对吗?
    • @lakesh 也许我没有解释清楚,但正如我所写,Tree 可以有零个或多个水果。 Fruit 与一棵树相关联。它对你有用吗?
    • 很好的答案,谢谢。我已经做了很多,但你填写了一些很有帮助的细节。
    猜你喜欢
    • 2011-01-03
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 2012-11-30
    • 2011-10-04
    相关资源
    最近更新 更多