我有一个简单的核心数据应用程序,它具有从实体A到B的多对多关系。我将删除规则保留为nullify
。
我只是希望删除所有与B类实体相关的A类实体。换句话说,当从给定B到A的所有关系都是nil时,应该删除实体B的特别对象。
现在我注意到,至少在我看来,这并不是自动发生的。我是否必须手动检查给定的B对象是否与A nil
具有所有关系,然后手动删除它们还是有自动方式来实现它?
答案 0 :(得分:4)
......或者是否有自动方式实现这一目标?
是的,如果您让Core Data来管理它。
如果你有两个人,请说Parent
和Child
前者与后者有一对多的关系
您可以使用删除规则级联设置children
关系。
相反,parent
关系将是
对optional
标记的检查取决于Child
是否存在与Parent
相关联的情况。
此处删除规则表示以下内容。
如果我删除父母,则会删除所有孩子。如果我删除了一个孩子,父母就不会发生任何事情(换句话说,父母不会被删除)。
Child
和Parent
之间的反向关系非常重要,因为让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,然后手动删除。
所以回答你的问题,我的理解是没有“自动”机制。