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

时间:2012-04-01 12:07:14

标签: ios iphone ipad cocoa-touch core-data

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

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

我发现这个thread关于这个问题;解决方案是在保存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];
}];

0 个答案:

没有答案