CoreData-Interface Builder keyPath pour selection multiple
nicox05
Membre
Bonjour,
Tout d'abord voici la structure CoreData :
Entité 'Commune'
- Attribut 'nomCommune'
- Relation 'lieuecRel' (One-To-many) vers entité 'lieuec'
Entité 'lieuec'
- Attribut 'nomLieu'
- Relation 'commune' (many-to-one) vers entité 'commune'
Dans IB, j'ai mis deux tables view et deux Array Controller (un 'Communes' et un 'lieuecs')
Pour le moment, j'ai mis un binding dans le 'Content set' vers 'Communes', controller key = 'Selection' et Model key Path = 'lieuecRel'
Ceci fonctionne quand je sélectionne une seule Commune dans le premier Table View. Comment faire pour pouvoir sélecitonner plusieurs communes et afficher la liste des lieux associés ? J'ai essayé de remplacé le Model Key Path par '@distinctUnionOfSets'; sans succès.
Pouvez-vous m'aider ?
Merci
Tout d'abord voici la structure CoreData :
Entité 'Commune'
- Attribut 'nomCommune'
- Relation 'lieuecRel' (One-To-many) vers entité 'lieuec'
Entité 'lieuec'
- Attribut 'nomLieu'
- Relation 'commune' (many-to-one) vers entité 'commune'
Dans IB, j'ai mis deux tables view et deux Array Controller (un 'Communes' et un 'lieuecs')
Pour le moment, j'ai mis un binding dans le 'Content set' vers 'Communes', controller key = 'Selection' et Model key Path = 'lieuecRel'
Ceci fonctionne quand je sélectionne une seule Commune dans le premier Table View. Comment faire pour pouvoir sélecitonner plusieurs communes et afficher la liste des lieux associés ? J'ai essayé de remplacé le Model Key Path par '@distinctUnionOfSets'; sans succès.
Pouvez-vous m'aider ?
Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Le problème est qu'une sélection multiple implique :
- soit la 2eme table vide si model key path = 'lieuecRel'
- soit une erreur si model key path = '@distinctUnionOfSets.lieuecRel'
Merci
Ah ces bindings ! (Comme dirait No).
Le code marche, on peut le vérifier dans le fichier XML pondu par l'appli.
Par contre, je n'ai pas encore trouvé comment comment n'afficher que les lieux pour ces communes. Je dirais qu'on ne peut pas faire cela avec les bindings (NSArrayController est plutôt fait pour un fonctionnement "Master-Details"), et je pencherais pour lancer une requête sur la base de données comme tu le demandes dans ton autre message.
Pour ma part, pour ajouter un lieu associé à une commune, j'ai plutôt utilisé la relation reciproque (qui est donc one-to-many) c'est a dire [lieu setValue:commune forKey:@commune]
Je pensais que l'on pouvait éviter d'utiliser des prédicats avec les binding et les opérateurs de key path (du genre @unionOfSets)
Je vais creuser. J'en profite pour demander si quelqu'un connait des tutoriaux avancés pour core data, j'ai l'impression que ca manque un peu (rien en litterature meme si un livre en anglais doit sortir fin mai)
Bon we
Il n'existe rien à ma connaissance à ce sujet, et c'est pas faut d'avoir cherché. J'ai laissé tombé parce que Core Data répondait assez mal aux besoins de mon projet, dont les objets sont organisés sous forme d'arbre: une BdD ne sert donc à rien (j'ai préféré enregistrer en XML). Ce qui me gène le plus dans Core Data, c'est que la BdD est forcément locale. Sachant que Core Data est beaucoup plus compliquée à mettre en oe“uvre qu'une simple base MySQL ou autre, et que la documentation d'Apple est navrante, je déconseillerais son utilisation dans 90% des projets.