删除核心数据对象实例 - 必须将关系设置为nil吗?

Mar*_*kus 6 iphone cocoa-touch core-data ipad ios

我会说,删除iOS上的核心数据对象是一项非常常见的任务.但它有一个常见的问题,我无法弄清楚自己:如果实例设置了关系,则删除失败NSValidationRelationshipDeniedDeleteError(1600).即使所有关系(包括反向)都设置为"可选",情况也是如此.Apple的文档说这个错误代码表示"与删除规则NSDeleteRuleDeny的某些关系是非空的".这不是这种情况; 所有关系都有一个删除规则"nullify".

我甚至尝试了我能想到的最简单的关系,使用Apple文档的员工和部门示例.只要没有设置部门,我就可以删除员工.

我找到了关于这个问题的线索 ; 解决方案是在保存MOC之前将所有关系设置为nil.这确实有效,但它并没有让我觉得最微弱.

我的问题:这是非常普遍的做法吗?这有什么意义?其他人用关系删除Core Data对象做了什么?

PS:如果有人感兴趣,这是我清除关系的代码; entityInstance是要删除的实例.该代码对于我的应用程序是通用的,这意味着它清除了要删除的实体的所有关系:

NSEntityDescription *ed = entityInstance.entity;
NSDictionary *relations = [ed relationshipsByName];
NSArray *keys = [relations allKeys];
[keys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  [entityInstance setValue:nil forKey:(NSString*) obj];
}];
Run Code Online (Sandbox Code Playgroud)