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 elsetValue: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.