Dav*_*ine 21 iphone cocoa cocoa-touch core-data cascading-deletes
我有两个A和B类,从A到B有多对一的关系(多个A对象可以引用相同的B).问题是,如果A侧的删除规则是Cascade,则仅在删除最后一个引用A 时才删除B,或者在第一次删除关联的A 时删除B. 如果重要的话,关系B侧的删除规则是Nullify.
另外,我在核心数据文档中读到,在某些情况下,Optional标志很重要.但目前尚不清楚他们所说的关系与我的案例有何关系.他们在讨论收容案(B由A拥有),而我的案例是订阅/关联(B与A有关).
我可以简单地在代码中管理删除programmaticaly,但是如果可能的话,我希望允许Core Data做正确的事情.但目前尚不清楚Core Data中是否支持我正在寻找的垃圾收集语义.
有什么建议?
Luk*_*kas 15
我的目标与你的目标相同(删除最后一次引用的A后删除B).为了做到这一点,我花了比预期更长的时间.特别是因为
-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];
}
}
}
Run Code Online (Sandbox Code Playgroud)
其他人建议把这个逻辑到-willSave的部门.我更喜欢上面的解决方案,因为在某些情况下我可能真的想要保存一个空的部门(例如在手动存储迁移或数据导入期间).