¿Cómo se elimina una entidad cuando lo retire de la controladora de la matriz?
-
22-09-2019 - |
Pregunta
Tengo una entidad (por ejemplo, Empleado) en un modelo de objeto gestionado que se relaciona con otras dos entidades (por ejemplo, Departamento y Equipo). Ambas relaciones son uno-a-muchos (es decir, un empleado debe tener un departamento y un equipo, equipos y departamentos tienen muchos empleados). Los dos se puede o no se superponen (por ejemplo, un equipo puede estar formado por empleados de recursos humanos, contabilidad y I.T. o podría consistir en varios sobresalen los empleados del departamento de uno).
Department <-->> Employee <<--> Team
Tengo dos NSArrayControllers que proporcionan datos para dos NSTableViews, una mesa y una mesa Departamento de equipo. Los empleados pueden moverse entre departamentos y entre equipos sin ningún problema, pero no estoy seguro de cómo eliminar (fuego) el empleado.
Si envío cualquiera de los controladores de arrays de un mensaje quitar el empleado se toma fuera del equipo (por ejemplo), pero dejó en el departamento y el gráfico de objeto está en un estado incoherente. Incluso si llamo a la acción de eliminación en ambos controladores no se elimina el objeto -. Que es huérfano y se cuelga a la vuelta en el limbo
Originalmente, tenía las relaciones del Departamento y del equipo (de la entidad Employee) conjunto a una norma de supresión de Nulidad pero incluso el cambio de uno o ambos de cascada no ayuda.
Do necesidad de anular el remove I: acción sobre los controladores de array a elimina realmente el empleado o me estoy perdiendo algo muy obvio
Solución
El NSArrayController
tiene dos comportamientos diferentes cuando se está utilizando la base de datos. Si se configura para simplemente ir a buscar objetos directamente del contexto de objeto gestionado, eliminará los objetos cuando se retiran.
Si va a obligar a la contentSet
a otro controlador, como suena como si estuviera en este caso, el comportamiento por defecto es simplemente eliminar el objeto de la relación. Si desea eliminarlo, sin embargo, hay una "eliminaciones objeto en remove" opción, que producirá el resultado deseado vinculante.