2009-10-21 4 views
4

J'ai une entité (par exemple un employé) dans un modèle d'objet géré qui est liée à deux autres entités (par exemple, le département et l'équipe). Les deux relations sont un-à-plusieurs (c'est-à-dire qu'un employé doit avoir un département et une équipe, les équipes et les départements comptent plusieurs employés). Les deux peuvent ou non se chevaucher (par exemple, une équipe peut être composée d'employés du service des ressources humaines, ou elle peut comprendre plusieurs employés d'un même département).Comment supprimer une entité en la supprimant d'un contrôleur RAID?

Department <-->> Employee <<--> Team  

J'ai deux NSArrayControllers fournissant des données pour deux NSTableViews, une table et une table Département d'équipe. Les employés peuvent se déplacer entre les départements et entre les équipes sans aucun problème, mais je ne sais pas comment supprimer (licencier) l'employé.

Si je vous envoie l'un des contrôleurs de réseau un message de supprimer l'employé est retiré de l'équipe (par exemple), mais laissé dans le département et le graphe d'objet est dans un état incohérent. Même si j'appelle l'action remove sur les deux contrôleurs, l'objet n'est pas supprimé - il est orphelin et reste dans les limbes.

Initialement, j'avais le Département & Relations d'équipe (de l'entité Employé) mis à une règle de suppression de Nullify, mais même en changeant un ou les deux cascade n'aide pas.

Ai-je besoin de passer outre le supprimer: action sur les contrôleurs RAID à supprimer effectivement l'employé ou suis-je manque quelque chose de vraiment évident?

Répondre

9

Le NSArrayController a deux comportements différents lorsque vous utilisez Core Data. S'il est configuré pour extraire simplement les objets directement du contexte de l'objet géré, il supprimera les objets lorsqu'ils seront supprimés.

Si vous liez le contentSet à un autre contrôleur, comme cela semble être le cas dans votre cas, le comportement par défaut consiste à simplement supprimer l'objet de la relation. Si vous voulez le supprimer, cependant, il y a une option de liaison "supprime l'objet sur supprimer", ce qui produira le résultat souhaité.

+0

Une chose si simple! J'aurais vraiment dû regarder les options de reliure !!! Bien sûr, j'ai aussi dû changer la règle de suppression de cascade pour annuler! Merci Alex! Je voterais votre réponse mais je n'ai pas encore assez de points de réputation! :) – Matthew

Questions connexes