Utiliser plusieurs NSManagedObjectContext dans un NSPersistentDocument
Bonjour,
J'utilise CoreData pour mon application et je souhaite distinguer les entités affectées par le Undo Redo de celles qui ne le sont pas. Apple parle de plusieurs NSManagedObjectContext dans un document pour ce genre de cas. Je mettrais un NSUndoManager sur l'un et rien sur l'autre. (For more details, see “Parent Store.â€)
J'ai lu dans la doc que l'on peut "empiler" des NSManagedObjectContext via la propriété parentStore qui depuis 10.7 peut être un autre NSManagedObjectContext au lieu d'un NSPersistentStoreCoordinator.
Dans la doc NSPersistentDocument il est dit que la fonction managedObjectContext doit être overridée pour customiser la création du persistent stack.
Quelqu'un a-t'il déjà mis les doigts dans ce cambouis là ? J'avoue être un peut désarçonné par la concision des conseils d'Apple et je subodore qu'il y a d'autres choses à connaà®tre et à faire.
Merci de vos pistes de réflexion.
Réponses
Bonjour,
Après quelques recherches et test j'opte pour cette solution :
1) je crée un NSManagerObjectContext supplémentaire dans mon NSDocument pour lequel je mets le NSUndoManager à nil
2) je lui affecte le même NSPersistentCoordinator que celui du NSDocument
3) j'abonne mon NSDocument aux notifications NSManagedObjectContextWillSaveNotification du NSManagerObjectContext de base du NSDocument
4) dans cette notification j'appelle le save de mon deuxième NSManagerObjectContext.
ça fonctionne très bien avec l'effet désiré : tout est sauvegardé par CoreData mais le Undo-Redo n'affecte que les données du NSManagerObjectContext de base.
Ensuite il faut utiliser le bon Manager lors de la création d'objet selon que l'on veut un Undo ou pas sur cet objet.
That's all folk.