2010-03-14 8 views
6

Tengo una interfaz de estilo de iTunes en mi aplicación: Lista de fuentes (NSOutlineView) a la izquierda que contiene diferentes bibliotecas y listas de reproducción con un NSTableView en el lado derecho de la interfaz que muestra información para "Presentaciones". Al igual que en iTunes, estoy mostrando el mismo tipo de información en la vista de tabla si se selecciona una biblioteca o lista de reproducción (título, autor, fecha de creación, etc.).¿Cómo puedo vincular una lista de fuentes de estilo de iTunes a un NSTableView utilizando Core Data?

alt text

Actualmente tengo una NSArrayController conectado a mi NSTableView y se ponía el predicado fetch basado en lo que fue seleccionado en la lista de fuentes. Esto funciona bien cuando selecciono una biblioteca porque puedo simplemente configurar el predicado de búsqueda para filtrar por el campo "tipo" en mi Presentación entidad de datos principales. Sin embargo, cuando trato de ajustar el predicado de búsqueda para la lista de reproducción, no parece que haya ninguna forma de establecer el predicado de búsqueda porque tengo una tabla entre Listas de reproducción y Presentaciones para mantener el orden dentro de la Lista de reproducción. De acuerdo con los documentos de Apple, este tipo de predicados no son factibles con los datos centrales (básicamente no tiene varias combinaciones internas). A continuación se muestra la parte relevante de mi Modelo de datos.

alt text

Es mi configuración de modelo de datos de forma incorrecta? ¿Debo soltar el NSArrayController y manejar la conexión de NSTableView a mano? Estoy tratando de averiguar si hay una solución simple, o realmente un defecto de diseño.

Respuesta

0

Existe una documentación para la creación de relaciones en 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

Pero afais de su modelo DB, que está haciendo las cosas bien con tres tablas:

Presentation con información sobre la canción PlaylistItem con one-to-one relación a la presentación Playlist con one-to-many relaciones cadera a playlistItem

Presentación [ID TITLE URL ALBUM ARTIST ....]
playlistItem [ID Presentation_ID Playlist_ID]
listas [ID Title MoreInfo]

Así que en el lenguaje de implementación del IB CoreData:

  • de inicio con ir a buscar a cabo cada lista de reproducción para NSOutlineView en la columna izquierda
  • En seleccione, obtenga ID de lista de reproducción y obtenga todo PlaylistItem basado en el filtrado de la lista de reproducción
  • playlistItem tendrá Presentación objeto dentro de acceso releated información de la canción

Y sí, si yo fuera usted, me gustaría preffer que tener cuidado con NSTableView que conecta con la mano

Cuestiones relacionadas