当所有关系都是零时,如何自动删除任何实体?

时间:2015-03-11 08:07:42

标签: ios core-data

我有一个简单的核心数据应用程序,它具有从实体A到B的多对多关系。我将删除规则保留为nullify

我只是希望删除所有与B类实体相关的A类实体。换句话说,当从给定B到A的所有关系都是nil时,应该删除实体B的特别对象。

现在我注意到,至少在我看来,这并不是自动发生的。我是否必须手动检查给定的B对象是否与A nil具有所有关系,然后手动删除它们还是有自动方式来实现它?

3 个答案:

答案 0 :(得分:4)

  

......或者是否有自动方式实现这一目标?

是的,如果您让Core Data来管理它。

如果你有两个人,请说ParentChild前者与后者有一对多的关系

enter image description here

您可以使用删除规则级联设置children关系。

enter image description here

相反,parent关系将是

enter image description here

optional标记的检查取决于Child是否存在与Parent相关联的情况。

此处删除规则表示以下内容。

如果我删除父母,则会删除所有孩子。如果我删除了一个孩子,父母就不会发生任何事情(换句话说,父母不会被删除)。

ChildParent之间的反向关系非常重要,因为让Core Data维持图表的一致性。所以,你应该(对我来说必须)在你拥有的每个模型中使用它。

这是你想要实现的吗?如果您需要别的东西,请告诉我。

更新1

  

只能删除子项,而不能删除父项。我想要的时候   父对象应删除给定父级的所有子级   也可以从商店中删除。父母不能直接   删除。

删除父母,这取决于你。在您的代码中,如果需要,您将不会删除父级。我会使用我提供的配置,因为如果删除子节点,父节点将删除对它的引用。

要删除属于特定父级的所有子级,我将使用针对Child的简单提取请求,其中谓词将是

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"parent == %@", parentOfTheChildrenYouWantToDelete];

一旦运行,请求将返回NSArray个托管对象。 for in删除它们。

答案 1 :(得分:4)

NSManagedObject子类

- (void)willSave
{
  // Check for relationship and delete self if empty
}

答案 2 :(得分:1)

在我对您的问题的理解中,我建议您考虑在代码中的某个位置运行特定的提取,以检查该关系的nil,然后手动删除。

所以回答你的问题,我的理解是没有“自动”机制。