CoreData, Tree model, Bindings, selection
nark
Membre
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 :
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.
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 :
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.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Salut,
A l'époque j'avais fait quelques petites recherches et, si je me rappelle bien, ces quelques sujets sont de bonnes pistes :
- http://espresso-served-here.com/2008/05/13/nstreecontroller-and-core-data-sorted/
- http://developer.apple.com/mac/library/samplecode/AbstractTree/index.html
Bon courage !