我的目标显然与您的目标相同(删除最后一个引用的 A后立即删除B)。我花了比预期更长的时间才能做到这一点。特别是因为
- 在A准备删除的时候, B中的一对多关系可能还没有更新,所以你不能只计算B中引用的A。
- 在A上的isDeleted似乎已经在
-prepareForDeletion
如果有人感兴趣,这对我有用(我会使用Department <-->> Employee因为它更容易阅读):
在员工中:
- (void)prepareForDeletion {
// Delete our department if we we're the last employee associated with it.
Department *department = self.department;
if (department && (department.isDeleted == NO)) {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isDeleted == NO"];
NSSet *employees = [department.employees filteredSetUsingPredicate:predicate];
if ([employees count] == 0) {
[self.managedObjectContext deleteObject:department];
}
}
}
其他人建议将此逻辑放入Department-willSave
。我更喜欢上面的解决方案,因为在某些情况下(例如在手动存储迁移或数据导入期间)我可能实际上想要保存一个空部门。