2010-06-17 15 views
13

Digamos que en Apple API versión 1.0, hay una clase NSFoo con una propiedad 'color'. API 1.1 agrega propiedad 'tamaño'.¿cómo puede averiguar si un NSObject tiene cierta propiedad?

Quiero saber si puedo utilizar el captador: myFoo.size

[myFoo respondsToSelector: @selector (getSize)] no funciona como se esperaba.

¿Cuál es la forma correcta de averiguar si un objeto tiene una propiedad? ¡Gracias!

Respuesta

36

Estás cerca. Su selector debe ser exactamente el mensaje que desea enviar al objeto:

if ([myFoo respondsToSelector:@selector(size)]) { 
    int size = [myFoo size]; // or myFoo.size in dot-notation. 
    // ... 
} 

debería funcionar.

+5

Debe tenerse en cuenta que esto se debe a que los getters predeterminados para las propiedades omiten el prefijo 'get'. A diferencia de los setters que tienen el prefijo 'set'. – Senseful

+0

Jaja, oops. ¡Gracias! – strawtarget

+0

¿Cómo puedo hacerlo al revés? Si quiero establecer el tamaño en Foo? myFoo no conoce las propiedades de la clase, por lo que no puedo acceder al tamaño. –

Cuestiones relacionadas