核心数据CoreDataGeneratedAccessors与简单分配

时间:2010-09-13 07:13:43

标签: core-data

我在Core Data图中有一对多的关系,我正在尝试理解使用CoreDataGeneratedAccessors方法和改变关系的简单赋值之间的区别。例如,Core Data Programming Guide有一个部门和员工示例。在该示例中,他们使用CoreDataGeneratedAccessors雇佣和解雇员工:

[aDepartment addEmployeesObject:newEmployee];
[aDepartment removeEmployeesObject:firedEmployee];

他们没有定义反向关系,但是说“部门”是与“雇员”的反向关系。以下是否应该完成同样的事情?

newEmployee.department = aDepartment
firedEmployee.department = nil;

根据“核心数据编程指南”的Manipulating Relationships and Object Graph Integrity部分,后面的示例应自动修复所有关系以保持图形一致性。如果是这种情况,当存在反向关系时,是否有任何理由使用CoreDataGeneratedAccessors?使用CoreDataGeneratedAccessors是否在反向关系上保持图形一致性?

1 个答案:

答案 0 :(得分:2)

  

他们没有定义逆   关系,但说“部门”是   与...的反比关系   “雇员”。应该如下   完成同样的事情?

无论您修改的关系的哪一端(使用反向),两个操作都会得到相同的结果。

  

如果是这种情况,当存在反向关系时,有没有理由使用CoreDataGeneratedAccessors?使用CoreDataGeneratedAccessors是否在反向关系上保持图形一致性?

两种方法的一致性不是问题。 出于性能原因,使用适当的方法修改大型关系非常重要。

解决方案1(解雇部门的所有员工)

for (Employee* employee in aDepartment.employees)
{
  employee.department = nil
}

解决方案2

aDepartment.employees = nil;

第一种解决方案将在每次操作后触发(表)视图的更新,而第二种解决方案将导致所有视图的一次更新。 如果处理大量对象,这可能会有很大的不同。

如果您需要更深入的信息,我认为已经在SO上讨论了类似的主题。