cocoa cocoa-bindings

cocoa - ¿Cuál es la diferencia entre “valores de contenido” y “objetos de contenido”?



cocoa-bindings (2)

Esos se explican en la Referencia de enlaces de cacao para NSPopUpButton , aunque esa referencia no está del todo clara.

Content es un controlador de matriz que proporciona elementos al botón emergente. El controlador de matriz debe estar vinculado a una matriz. Para determinar cómo se muestra cada elemento de la matriz en el botón emergente, la -description se envía a cada objeto de la matriz.

Puedes personalizar esto de dos maneras:

  • Si desea que el enlace de Selected Object proporcione un objeto distinto de los elementos de matriz administrados por el controlador de matriz al que se enlazó el Content , puede vincular Content Objects a otra controladora de matriz. También podría ser el mismo controlador de matriz pero con una ruta de clave diferente;

  • Si desea que las opciones del botón emergente sean algo diferentes a la descripción de cada elemento de la matriz administrada por el controlador de matriz al que se enlazó el Content , puede vincular los Content Values a otra controladora de matriz que administra una matriz cuyos elementos contienen las opciones emergentes. . También podría ser el mismo controlador de matriz pero con una ruta de clave diferente.

Un ejemplo simple: supongamos que tiene la siguiente clase:

@interface Customer : NSObject @property (copy) NSString *name; @property (copy) NSString *phoneNumber; @end

y usted no ha anulado el método -description . En este caso, la -description es inútil y la propiedad de name sería una buena opción para las opciones emergentes. Te unirías

  • Content a un controlador de matriz que administra una matriz de instancias del Customer , controlador clave arrangedObjects ;
  • Content Values para el mismo controlador de matriz, controlados por la teclaObjetos, name ruta clave.

Luego puede vincular Selected Object a otra cosa, por ejemplo, una propiedad en su delegado de aplicación o controlador de ventana. Los enlaces de cacao luego asignarían la instancia de Customer seleccionada a esa propiedad.

Ahora suponga que no está interesado en el objeto Customer completo que se ha seleccionado, sino solo en su número de teléfono. En este caso, puede enlazar Content Objects al mismo controlador de array, la clave del controladorordenadaObjects, model keypath phoneNumber . Cuando se selecciona una opción emergente, los enlaces de Cocoa establecerán phoneNumber lugar de una instancia completa del Customer . En resumen: si no vincula Content Objects , el Selected Object representa el objeto original en la matriz. Si vinculas Content Objects , el Selected Object puede ser algo diferente.

Debería enlazar el Selected Value si no estuviera interesado en los objetos originales (o en los objetos de contenido), pero en las cadenas reales que se muestran en las opciones emergentes de acuerdo con los enlaces de Content Values .

Receta rápida para proporcionar datos al botón emergente:

  • Enlace Content si tiene objetos (no solo cadenas) que representan las opciones emergentes;
  • Enlace Content Values si las opciones que se muestran al usuario no se pueden obtener a través del Content mediante el envío de una -description a los elementos de la matriz;
  • Vincule los Content Objects si desea que el Selected Object devuelva algo diferente de los elementos de la matriz de Content .

Receta rápida para obtener la selección actual en un botón emergente:

  • Enlace el Selected Object si desea conocer el objeto completo (ya sea de Content o Content Objects ) que representa la selección emergente actual;
  • Enlace el Selected Value si solo desea la cadena que está seleccionada actualmente en la ventana emergente.

Y, por último, usaría la Selected Tag si las opciones emergentes se toman de un menú cuyos elementos tienen un conjunto de etiquetas.

Estoy explorando enlaces ahora mismo, y tengo un NSPopUpButton -

Me presenta varias opciones para los enlaces en Selección de valor: Content , Content Objects Content Value , Content Value y luego Selected Object Selected Value, Selected Tag y Selected Tag . ¿Podría alguien explicar la diferencia entre estos?


#Object refiere a cualquier objeto compatible con KVC. #ObjectValue refiere a la ruta de acceso clave utilizada para obtener el valor de ese objeto.

Por lo tanto, para su enlace emergente, ContentObjects estaría ligado a, por ejemplo, los organizados NSArrayController de NSArrayController . Digamos que esto se refiere a una matriz de diccionarios u objetos gestionados. No puede presentar un diccionario de forma significativa en una <NSCFDictionary... emergente (obtiene el inicio de la salida de la description , por ejemplo, <NSCFDictionary... o similar), por lo que aquí es donde entra el enlace contentValues. Esto sería algo así como su NSArrayController arrangedObjects.name , donde name es una clave de su diccionario u objeto gestionado.

Espero que esto ayude, luché con el mismo concepto cuando empecé con los enlaces.