objective-c struct key-value-coding

objective c - ¿Cómo hace NSValue su magia?



objective-c struct (1)

Tengo una aplicación MVC. El modelo tiene una propiedad que es una estructura NSSize . Se puede escribir de esta manera:

- (void)setSize:(NSSize)aSize;

La vista establece este NSSize utilizando clave-valor-codificación. Sin embargo, no puede codificar-valor-clave una estructura, así que lo envolví en un objeto NSValue como este:

[theView setValue:[NSValue valueWithSize:mySize] forKey:@"theModel.size"];

A mi entender, esto no debería funcionar ya que el NSValue acceso espera una estructura y no un NSValue . Pero funciona perfectamente. Por arte de magia.

¿Cómo es esto posible?


Desplácese hacia abajo hasta " Envoltura y desensamblaje de estructuras ", pero esta es la esencia:

setValue:forKey: determina el tipo de datos requerido por el setValue:forKey: acceso o la variable de instancia para la clave especificada. Si el tipo de datos no es un objeto, entonces el valor se extrae del objeto pasado utilizando el método de -<type>Value apropiado -<type>Value .

Por cierto, ¡gracias por hacer esta pregunta! Esta es una de esas cosas de cacao que siempre "funcionó" y nunca consideré que no era obvio cómo se lograba.