9

Cuando vinculo un control a un NSArrayController usando el Interface Builder, hay una variedad de opciones debajo del campo "Controller Key" en el inspector de enlaces.Vinculaciones de valor de clave de cacao: ¿Cuáles son las explicaciones de las diversas opciones para la clave de controlador?

Entiendo lo que es "arrangedObjects", y entiendo parcialmente qué es "selección", pero me gustaría ver una explicación muy buena de todas las opciones y cuándo usar cada una. La lista incluye: selectionIndexes, selectionIndex, selectedObject, sortDescriptors, etc. No he podido encontrar una buena explicación de estas opciones.

Tengo problemas con un botón que está destinado a dirigir> selección, así que estoy esperando una comprensión mucho más profunda de estas teclas del controlador me podría ayudar a depurar mi problema.

Gracias !!!

Respuesta

12

Estos son difíciles de encontrar. Parecen referenciados en todas partes por varios libros de Cocoa, e incluso por los documentos de Apple, pero no he visto a nadie unificar una explicación de ellos en un solo lugar.La respuesta es, Apple los define dentro de la documentación para cada clase controlador:

  • NSObjectController (doc)
  • NSArrayController (doc)
  • NSDictionaryController (doc)
  • NSTreeController (doc)
  • NSUserDefaultsController (doc)

Estos documentos también son útiles:

de herencias de estos objetos "controlador" se parece a lo que (esto es importante para descubrir donde algunas de las opciones de "tecla Controller" proceden de):

NSController -> NSObjectController 
NSController -> NSObjectController -> NSArrayController 
NSController -> NSObjectController -> NSArrayController -> NSDictionaryController 
NSController -> NSObjectController -> NSTreeController 
NSController -> NSUserDefaultsController 

// Note: NSController is an abstract class (don't worry about it). It inherits from NSObject. 

Si encuentra una clave del controlador no definida en los documentos para una clase en particular, es probablemente definido en su superclase. A continuación se presentan todas las teclas del controlador disponibles para cada una de las anteriores (Xcode 3.2.1, 3.2.1 Interface Builder):

// **NSObjectController** 
canAdd 
canRemove 
isEditable 
selectedObjects 
selection 


// **NSArrayController** 
arrangedObjects 
canAdd 
canInsert 
canRemove 
canSelectNext 
canSelectPrevious 
filterPredicate 
isEditable 
selectedObjects 
selection 
selectionIndex 
selectionIndexes 
sortDescriptors 


// **NSDictionaryController** 
arrangedObjects 
canAdd 
canInsert 
canRemove 
canSelectNext 
canSelectPrevious 
filterPredicate 
isEditable 
selectedObjects 
selection 
selectionIndex 
selectionIndexes 
sortDescriptors 


// **NSTreeController** 
arrangedObjects 
canAdd 
canAddChild 
canInsert 
canInsertChild 
canRemove 
isEditable 
selectedObjects 
selectedNodes 
selection 
selectionIndexPath 
selectionIndexPaths 
sortDescriptors 


// **NSUserDefaultsController** 
hasUnappliedChanges 
values 

lo tanto, encontrar el que está en la lista que desea, busque en la documentación de dicha controladora clase, y encontrarás su definición. Si no está allí, probablemente esté definido en los documentos para su superclase (probablemente NSObjectController).

+1

Gracias Dave, ¡esto es muy útil! – Elisabeth

+0

¡Eres más que bienvenido! Además, aquí hay otra pregunta similar a esta que también tiene algunas buenas respuestas: http://stackoverflow.com/questions/595257/what-does-controller-key-mean-in-interface-builder-inspector-bindings/2440523 –

7

La clave del controlador es la clave para la (propiedad del objeto de controlador) que está uniéndose a. La ruta de la clave del modelo es la ruta clave mediante la cual el objeto enlazado puede solicitar objetos del modelo para objetos más básicos, como cadenas o imágenes, o para otros objetos del modelo (es decir, profundizar en el modelo).

Un ejemplo: Digamos que usted tiene objetos a una persona en un controlador de array, y cada persona tiene un name. Vincula una columna de tabla al controlador de matriz, la clave del controlador arrangedObjects (obteniendo así los objetos de modelo), modela la ruta de clave name (obteniendo de ese modo los objetos de valor).

Un ejemplo más complejo: Supongamos que tiene un controlador de array de Departamentos. Cada departamento contiene personas (empleados en el departamento). Puede enlazar su controlador Personas matriz al controlador de Departamentos, regulador clave arrangedObjects (conseguir los objetos del modelo del Departamento), modelo de ruta de la clave @distinctUnionOfObjects.employees (conseguir los objetos del modelo persona), y la clave a continuación, enlazar una columna de tabla al controlador personas, controlador arrangedObjects, modelo clave ruta name.

Esa tabla sería para las personas que trabajan para su empresa; Si tiene una tabla separada de empleados prospectivos, también puede crear objetos Persona para ellos, y no aparecerán en la tabla de empleados existentes porque no están en un Departamento. Cuando los contrata, los agregará a uno o más Departamentos; luego, aparecerán en el controlador de grupo People automáticamente, porque ese controlador de array está observando el employees de todos los Departamentos.

+0

Solo pregunto. Creo que ese controlador y modelo, de hecho, son solo modelos. ¿Por qué es la diferencia? – onmyway133

2

Tener un vistazo a la Interface Builder User Guide, hay una "conexión" y los enlaces de la sección 7-1 con una mesa en la que se lee:

Clave Controlador: Un atributo de un objeto NSController . Al vincular a un objeto NSController, utilice este campo para seleccionar la primera entrada en la ruta de la clave . El menú asociado con este campo muestra las propiedades disponibles en el objeto del controlador seleccionado como una conveniencia. Puede escribir el nombre de la propiedad o simplemente seleccionarlo de la lista proporcionada.

Cuestiones relacionadas