2009-11-08 2 views
6

J'essaie de créer une interface simple à mon modèle de données de base dans le style du navigateur iTunes Genre.Implémentation de parent-> enfant en bas dans Cocoa avec des liaisons de données de base qui couvrent plusieurs entités

J'ai une configuration de modèle avec trois entités: Genre <-->> Artist <-->> Album. Je voudrais simplement les attacher à un NSTableView, mais il semble que l'accès aux relations enfants à partir d'un NSArrayController n'est pas compatible avec KVC. Donc, j'ai du mal à communiquer les objets Genre sélectionnés au ArtistController.

Comment faites-vous cela? Est-il même possible dans IB sans sous-classement personnalisé?

Modifier pour la postérité: Je faisais plusieurs choses mal.

  • Le contrôleur enfant doit connaître le managedObjectContext via sa propre liaison.
  • Le contrôleur enfant doit et non être en mode Entity, mais fonctionne plutôt comme une classe NSMutableDictionary. Et enfin, le contrôleur enfant ne prépare pas ses données. Il l'extrait du parent, via la liaison Content Set. Utilisez la clé du contrôleur selection et le chemin de la clé du modèle qui se connecte aux enfants.

ou. La réponse de Brian et this MacResearch tutorial ont été utiles pour déterminer mes erreurs (et les parties que j'avais raison).

Répondre

4

L'approche que je prendrais probablement est d'avoir un NSArrayController séparé pour chaque vue de table, alors que le contenu d'un contrôleur de tableau soit basé sur la sélection d'un autre. Par exemple, supposons que vous ayez une vue de tableau A qui affiche la liste des genres disponibles, donc elle a un contrôleur de tableau A dont le contenu est relié au contexte de votre objet géré. Ensuite, disons que vous avez une vue de table B qui montre les artistes disponibles pour n'importe quel genre sélectionné dans le tableau A. Cette table aurait son propre contrôleur de matrice B, et le tableau de contenu pour le contrôleur B est lié de la sorte "field dans IB est défini sur la touche" selection "du contrôleur A," artists "étant la clé du modèle (ceci suppose que votre entité Genre a une relation to-many appelée" artists "à l'entité Artist).

Vous pouvez ensuite appliquer le même principe à un troisième tableau + contrôleur pour afficher les albums de l'artiste sélectionné.

Le terme général pour ce type de configuration est une « interface maître détail », et est décrit dans les documents d'Apple à this link

+0

Oui, c'est précisément ce que j'ai essayé. Je reçois l'erreur d'exécution: '[ valueForUndefinedKey:]: l'entité MBGenre n'est pas une valeur clé codage-conforme pour la clé" artistes ". J'ai essayé six ou sept manières différentes d'accéder à la relation enfant, aucun de qui travail. Merci pour la contribution ça me fait me sentir beaucoup moins folle. –

Questions connexes