我在Core Data图中有一对多关系,我试图理解使用CoreDataGeneratedAccessors方法和改变关系的简单赋值之间的区别.例如," 核心数据编程指南"有一个部门和员工示例.在该示例中,他们使用CoreDataGeneratedAccessors来雇佣和解雇员工:
[aDepartment addEmployeesObject:newEmployee];
[aDepartment removeEmployeesObject:firedEmployee];
Run Code Online (Sandbox Code Playgroud)
他们没有定义反向关系,但是说"部门"是与"雇员"的反向关系.以下应该完成相同的事情吗?
newEmployee.department = aDepartment
firedEmployee.department = nil;
Run Code Online (Sandbox Code Playgroud)
根据"核心数据编程指南" 的" 操作关系和对象图完整性"部分,后面的示例应自动修复所有关系以保持图形一致性.如果是这种情况,当存在反向关系时,是否有任何理由使用CoreDataGeneratedAccessors?使用CoreDataGeneratedAccessors是否在反向关系上保持图形一致性?
他们没有定义逆关系,但说“部门”是“员工”的逆关系。那么下面的内容应该完成同样的事情吗?
无论您修改关系(具有逆关系)的哪一端,这两个操作都具有相同的结果。
如果是这种情况,当存在反向关系时是否有任何理由使用 CoreDataGenerateAccessors?使用 CoreDataGenerateAccessors 是否可以保持逆关系上的图形一致性?
两种方法都没有一致性问题。出于性能原因,使用适当的方法修改大型关系非常重要。
解决方案1(解雇某个部门的所有员工)
for (Employee* employee in aDepartment.employees)
{
employee.department = nil
}
Run Code Online (Sandbox Code Playgroud)
解决方案2
aDepartment.employees = nil;
Run Code Online (Sandbox Code Playgroud)
第一个解决方案将在每次操作后触发(表)视图的更新,而第二个解决方案将导致所有视图的一次更新。如果您处理大量对象,这可能会产生很大的差异。
如果您需要更深入的信息,我认为类似的主题已经在 SO 上进行了讨论。
| 归档时间: |
|
| 查看次数: |
4006 次 |
| 最近记录: |