2011-12-02 14 views
5

Vengo de iOS y trato de construir la aplicación de OS X más sencilla posible pero me está costando mucho hacer la transición. Más específicamente, no puedo entender cómo integro Core Data con un NSTableView usando un NSArrayController;Creando una aplicación de detalles maestros usando NSTreeController, NSArrayController y Core Data

Actualmente, la aplicación se ve esto: Contacts app

Mi modelo de datos es el siguiente:

enter image description here

Como se puede ver que es muy simple. Quiero poder seleccionar un Grupo en la lista de fuentes izquierda, luego mostrar todas las Personas que están en la vista de tabla derecha.

He logrado conectar el NSOutlineView a un simple NSArray, pero ¿cuál es la mejor manera de conectarlo a todos los objetos del Grupo, usando un NSTreeController, y hacerlo todo editable?

Respuesta

3

Agregue NSArrayController y conéctelo a su entidad Group (llámelo GroupController). Seleccione la columna de la tabla de su vista de fuente izquierda y vaya al inspector de enlaces. Seleccione la sección Value y conéctela al GroupController marcando la casilla. Complete el enlace configurando Controller Key en arrangedObjects y Model Key Path en title.

Agregue NSArrayController (PersonsController). Vaya al inspector de enlaces y seleccione la sección llamada Content Set. Seleccione su GroupController de la lista desplegable y marque la casilla de verificación para vincular PersonsController al GroupController. Complete el enlace configurando Controller Key en selection y Model Key Path en persons. Esto recuperará las personas conectadas al grupo seleccionado en el PersonsController

A continuación, puede vincular una vista de tabla en el lado derecho de la ventana al PeopleController. Conecte cada columna de la tabla al PeopleController (firstName, lastName).

La capacidad de edición se puede establecer en el nivel de columna de la vista de tabla en su entidad Person.

EDITAR: Oops, acaba de volver a leer su pregunta y vio que desea un NSTreeController. Creo que puedes reemplazar el GroupController, que es un NSArrayController simple, con un NSTreeController. No veo ninguna jerarquía en tu entidad de Grupo. Here es un buen tutorial con código para un controlador de árbol que admite entidades con jerarquías.

EDIT2: Otro buen tutorial es el ejemplo de SourceView de Apple. Muestra cómo configurar una Vista de origen utilizando un NSTreeController. Su origen de datos está basado en archivos basados ​​en NSDictionary, pero usando el otro tutorial y la descripción de los enlaces obligatorios en mi respuesta, debería ser capaz de hacerlo funcionar.

+0

Bueno, no necesariamente quiero un NSTreeController, pero quiero usar una lista fuente para mostrar mis objetos de Grupo, porque quiero el encabezado "GRUPOS" sobre ellos. ¿Es posible usar un NSArrayController? El tutorial no dice nada sobre eso. – Rits

+0

No, AFAIK Sé que debe usar NSOutlineView y NSTreeController. Construí mi aplicación maestra/detalle usando ese tutorial y funciona muy bien. El tutorial en realidad usa dos controladores: un NSArrayController para recuperar elementos de nivel superior (usando un predicado parent == nil) y luego un NSTreeController para mostrar el árbol real. – Roger