NSManagedObject *doomedDepartment = // get the department to be deleted
NSSet *employees = [doomedDepartment valueForKey:@"employees"];
NSSet *orphanedEmployees = [employees filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"departments.@count == 1"]];
for (NSManagedObject *orphanedEmployee in orphanedEmployees) {
[managedObjectContext deleteObject:orphanedEmployee];
}
[managedObjectContext deleteObject:doomedDepartment];
- (void)managedObjectContextDidChange:(NSNotification *)notification {
NSSet *updatedObjects = [[notification userInfo] objectForKey:NSUpdatedObjectsKey];
for(NSManagedObject *obj in updatedObjects){
// walk through updated objects -> check for employees
// check if they still contain departments and if not delete them
if([obj.entity.name isEqualToString:@"Employee"]){
NSLog(@"Employee changed!");
if([[(Employee*)obj Departments] count]==0){
NSLog(@"No more relations -> Delete Employee");
[managedObjectContext deleteObject:obj];
}
}
}}
2 回答
级联规则将自动删除目标上的对象 . 因此,如果删除某个部门,员工将被删除,无论他们所在的部门数量如何 .
听起来你想要的行为有点微妙,只删除“孤儿”员工 - 即那些没有部门的员工 . 删除部门时,找到这些部门的好方法是执行以下操作:
谢谢,亚历克斯 . 我可能会这样做 . 与此同时,我发现了一种不同的方式:
1.)注册变更通知:
2.)当发生变化并且员工得到更新时 . 我检查该对象是否与部门有0关系并删除它:
这也很有效,但是如果你有几个不同的实体来观察这种行为,可能会变得更复杂 .