核心数据删除一对多的规则

时间:2012-06-27 17:29:15

标签: core-data

根据我一直在阅读的内容,对于像department <->> employee这样的关系,我无法设置一个简单的删除规则,如果部门中的最后一个员工被删除,将导致部门被删除。相反,我必须编写这个规则。

我以为我可以使用部门实体的didChangeValueForKey:方法进行键值观察。我想以干燥的方式将这个删除操作集中到一个地方。

我不希望部门实体可以自行删除,如下所示:

- (void) didChangeValueForKey:key {
    if (![key isEqualToString @"employee") return;
    if (self.employee == NULL)
        [self deleteAndSave];  // a category method
}

所以我可能会发布通知,而不是

- (void) didChangeValueForKey:key {
    if (![key isEqualToString @"employee") return;
    if (self.employee == NULL)
        [[NSNotificationCenter defaultCenter] postNotificationName:@"empDelete" object:self];
}

然后将删除发生在我处理托管对象上下文之类的对象中。

我错过了一些可以让这更容易的事情吗?

2 个答案:

答案 0 :(得分:1)

删除规则的好地方是-(void)prepareForDeletion。您可以实现所需的任何行为,从最简单到最复杂。

删除部门时,您可以按示例将所有部门的员工移至主管部门(如果有)。当您删除员工时,您可以检查父部门是否仍有员工,如果留空则将其删除。你的电话。

答案 1 :(得分:0)

您的解决方案似乎很好,这里有一些其他可能的方法。 Core Data Deletion rules and many-to-many relationships