核心数据 - DENY规则不会删除与删除的源对象相关的目标对象

时间:2013-03-21 10:39:49

标签: ios core-data

我有两张桌子。作业和问题。这两个表之间的关系太多了。从分配到问题的删除规则是DENY,从问题到分配是Nullify。

当删除作业时,我想删除与该作业相关的所有问题,留下仍与其他作业有参考的问题。这就是DENY删除规则从Assignment to Questions设置的原因。

在删除作业之前,请确保删除作业中的问题参考,如下所示:

Assignment *assignment = assignment to be deleted;

for (SMQuestion *question in [assignment.questions allObjects])
{
//NSLog(@"The Question ID is %@",question.questionId);

//[question removeAssignmentsObject:assignment];
[assignment removeQuestionsObject:question];
//question.assignments = nil;
}

[[[CoreDataManager sharedObject] managedObjectContext] deleteObject:assignment];

[[[CoreDataManager sharedObject] managedObjectContext] save:&error];

但删除作业后,没有任何问题从数据库中删除。我在这里做错了什么吗?

1 个答案:

答案 0 :(得分:1)

DENY规则不会导致删除任何对象。它只会阻止源对象与目标对象有关系时被删除。

在这种情况下(从分配到问题的DENY规则),如果分配与任何问题相关,则无法删除分配。

您的代码只会删除从分配到问题的关系。您必须检查问题是否还有其他任何分配,否则请删除该问题。

另请注意,循环中的question.assignments = nil;会从问题中删除所有分配,而不仅仅是“要删除的分配”。