Tengo una relación 1-a-muchos en un gráfico de Core Data, y estoy tratando de entender la diferencia entre usar un método CoreDataGeneratedAccessors y una asignación simple para alterar una relación. Por ejemplo, el Core Data Programming Guide tiene un ejemplo de departamento y empleado. En ese ejemplo se utilizan los CoreDataGeneratedAccessors para contratar y despedir empleados:Core-Data CoreDataGeneratedAccessors versus asignación simple
[aDepartment addEmployeesObject:newEmployee];
[aDepartment removeEmployeesObject:firedEmployee];
No definen una relación inversa, pero dicen "departamento" es la relación inversa a los "empleados". ¿Debería entonces lo siguiente lograr lo mismo?
newEmployee.department = aDepartment
firedEmployee.department = nil;
De acuerdo con la sección Manipulating Relationships and Object Graph Integrity de la Guía de programación de datos básicos, los ejemplos posteriores deben corregir automáticamente todas las relaciones de mantener la coherencia gráfica. Si ese es el caso, ¿hay alguna razón para utilizar CoreDataGeneratedAccessors cuando existe una relación inversa? ¿El uso de CoreDataGeneratedAccessors mantiene la consistencia del gráfico en las relaciones inversas?
Martin- gracias por la respuesta. Tengo una situación donde puedo usar [aDepartment addEmployeesObject: newEmployee] una vez, pero las llamadas posteriores dentro de la aplicación (independientemente de si está en otro newEmployee) no se actualiza. Sin embargo, reemplazar esto con newEmployee.department = aDepartment siempre funciona. Los comportamientos de las dos llamadas parecen inconsistentes, por lo que estoy desconcertado de que se supone que deben hacer lo mismo. Ideas? – chris
@chris - parece que no tiene una relación inversa entre la entidad del Departamento y la entidad del Empleado. – TechZen
Solo experimenté tal comportamiento en ciertas situaciones especiales cuando las observaciones se activan en ciertos procesos de cambio de datos centrales y en las relaciones de modificación del código de observador.(esto fue un error de mi código) –