Core data 核心数据CoreDataGeneratedAccessor与简单分配

Core data 核心数据CoreDataGeneratedAccessor与简单分配,core-data,Core Data,我在核心数据图中有一个1对多的关系,我试图理解使用CoreDataGeneratedAccessor方法和简单赋值来改变关系之间的区别。例如,有一个部门和员工示例。在该示例中,他们使用CoreDataGeneratedAccessor雇佣和解雇员工: [aDepartment addEmployeesObject:newEmployee]; [aDepartment removeEmployeesObject:firedEmployee]; 他们没有定义反向关系,而是说“部门”与“员工”是反向

我在核心数据图中有一个1对多的关系,我试图理解使用CoreDataGeneratedAccessor方法和简单赋值来改变关系之间的区别。例如,有一个部门和员工示例。在该示例中,他们使用CoreDataGeneratedAccessor雇佣和解雇员工:

[aDepartment addEmployeesObject:newEmployee];
[aDepartment removeEmployeesObject:firedEmployee];
他们没有定义反向关系,而是说“部门”与“员工”是反向关系。那么,下列各项是否也应该完成同样的任务

newEmployee.department = aDepartment
firedEmployee.department = nil;
根据核心数据编程指南的一节,后面的示例应该自动修复所有关系,以保持图形一致性。如果是这样,当存在反向关系时,是否有任何理由使用CoreDataGeneratedAccessor?使用CoreDataGeneratedAccessor是否在反向关系上保持图形一致性

他们没有定义一个倒数 关系,但说“部门”是 与之相反的关系 “雇员”。那么,你是否应该这样做 完成同样的事情

newEmployee.department = aDepartment
firedEmployee.department = nil;
无论修改关系的哪一端(使用反向),这两个操作都具有相同的结果

如果是这样,当存在反向关系时,是否有任何理由使用CoreDataGeneratedAccessor?使用CoreDataGeneratedAccessor是否在反向关系上保持图形一致性

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

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

解决方案2

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


如果您需要更深入的信息,我想类似的话题已经讨论过了。

Martin-谢谢您的回复。我有一种情况,我可以使用[A部门addEmployeesObject:newEmployee]一次,但应用程序中的后续调用(无论是否在另一个newEmployee上)不会更新。但是,用newEmployee.department=a替换它总是有效的。这两个电话的行为似乎不一致,所以我不明白他们应该做同样的事情。想法?@chris——听起来部门实体和员工实体之间没有反向关系。我只在某些特殊情况下经历过这种行为,即在某些核心数据更改处理和观察者代码修改关系中触发观察。(这是我代码中的一个bug)@TechZen:我很确定反向关系是正确的,因为我可以从两个方向访问实体;一方面是部门,另一方面是员工。奇怪的是,[aDepartment addEmployeesObject:newEmployee]调用在每次启动应用程序时都会运行一次,但在随后的调用中失败。@chris——不知道是什么原因导致了它。您是否为员工提供自定义访问器?如果在任何地方使用基本访问器,它们都不会触发KVO。你必须自己打电话给他们。