CoreData, Tree model, Bindings, selection

narknark Membre
février 2010 modifié dans API AppKit #1
Bonjour a tous,

Un petit tour par ici car je sèche sur un problème CoreData. J'espère trouver des idées.
Il s'agit surement d'un problème de conception, ou d'une subtilité que je n'ai pas saisi.

Tout d'abord, le modèle :
model.png

Ce modèle implémente un arbre à  deux niveaux IPClass et IPMember, ou une entité de type IPMember est forcement une feuille (IPMember est une entité abstraite).

J'ai choisi de différencier les deux niveaux pour plusieurs raisons, notamment pour faciliter la gestion par type pour chaque collection de noeuds. Ainsi, dans IB je me retrouve avec :

Abstract :
- NSTreeController (treeController) -> Entité : IPClass -> File's Owner.managedObjectContext

Premier niveau :
- NSArrayController (classController) -> Entité : IPClass -> File's Owner.managedObjectContext

Deuxième niveau :
- NSArrayController (attributeController) -> Entité : IPAttribute -> File's Owner.managedObjectContext + classController.selection.children
- NSArrayController (methodController)-> Entité : IPMethod -> File's Owner.managedObjectContext + classController.selection.children

Ensuite, coté UI j'ai un NSOutlineView, qui marche bien (ajout et suppression), mais pas pour la sélection. En effet, les bindings rattachés aux contrôleurs ne suivent pas :

- Exemple 1 : je crée deux pères de type IPClass, si je sélectionne le premier des deux et que j'y ajoute un membre, le membre est ajouté au deuxième, qui est le dernier noeud créé.
- Exemple 2 : j'ai des vues qui me permettent d'éditer en détail les éléments du modèle (inspecteur); ces vues ne sont pas correctement updatées au changement de sélection. Si j'ai deux méthodes dans une classe, je peux seulement éditer la dernière créée. (je lie mes composants UI de la façon suivante : methodController.selection.name).

Et je ne vois pas comment résoudre le problème. Si je dois modifier le modèle, il vaudrait mieux que je le fasse maintenant, avant que le projet devienne une usine. ;-)

Merci d'avance pour votre aide.

EDIT :
Je viens de voir ce post (2008) de Flo, qui n'avait à  l'époque pas résolu le problème :
http://www.pommedev.com/forum/index.php?topic=2927.msg29042#msg29042
J'espère que quelqu'un a trouvé une solution efficace depuis, car mon problème de fond, c'est bien de gérer indépendamment mes entités au niveau CoreData.

Réponses

Connectez-vous ou Inscrivez-vous pour répondre.