2010-03-14 13 views
6

J'ai une interface de style iTunes dans mon application: Liste de sources (NSOutlineView) sur la gauche qui contient différentes bibliothèques et listes de lecture avec un NSTableView sur le côté droit de l'interface affichant des informations pour "Présentations". Similaire à iTunes, je montre le même type d'information dans la vue de table si une bibliothèque ou une liste de lecture est choisie (titre, auteur, date créée, etc.).Comment lier une liste de sources de style iTunes à un NSTableView en utilisant des données de base?

alt text

J'ai actuellement un NSArrayController connecté à mon NSTableView et mettait le prédicat d'extraction en fonction de ce qui a été sélectionné dans la liste des sources. Cela fonctionne très bien lors de la sélection d'une bibliothèque car je peux simplement définir le prédicat d'extraction à filtrer par le champ "type" dans mon Présentation Entité de données de base. Lorsque j'essaie d'ajuster le prédicat d'extraction pour la playlist, cependant, il ne semble pas possible de définir le prédicat d'extraction, car j'ai une table entre Playlists et Presentations pour suivre l'ordre dans la Playlist. Selon les docs d'Apple, ces types de prédicats ne sont pas réalisables avec les Core Data (il ne s'agit pas de plusieurs jointures internes). Voici la partie pertinente de mon modèle de données.

alt text

Est-ce ma configuration de modèle de données de façon incorrecte? Dois-je supprimer le NSArrayController et gérer la connexion de NSTableView à la main? J'essaye de comprendre s'il y a une correction simple, ou vraiment un défaut de conception.

Répondre

0

Il existe une documentation pour créer des relations dans CoreData

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html
http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/CoreData/Articles/cdBindings.html

Mais afais de votre modèle DB, vous le faites à droite avec trois tables:

Presentation avec des informations sur la chanson PlaylistItem avec one-to-one relation à la présentation Playlist avec one-to-many relations hanche à PlaylistItem

Présentation [ID TITLE URL ALBUM ARTIST ....]
PlaylistItem [ID Presentation_ID Playlist_ID]
Playlists [ID Title MoreInfo]

dans un langage de mise en œuvre IB CoreData:

  • Commencez par aller chercher sur chaque liste de lecture à NSOutlineView dans la colonne de gauche
  • Sur sélectionnez, obtenez l'ID de la liste de lecture et récupère tous les éléments Playlist en fonction du filtrage de Playlist_ID
  • PlaylistItem aura objet Présentation à l'intérieur pour l'accès releated info chanson

Et oui, si je vous étais, je preffer de prendre soin de NSTableView connecter à la main