objective c - Acceda a la propiedad Objective-C dinĂ¡micamente con el nombre de la propiedad
reflection key-value-coding (2)
Si bien @weichsel es correcto, hay una mejor manera.
Utilizar:
[anObject valueForKey: @"propertyName"];
y
[anObject setValue:value forKey:@"propertyName"];
Obviamente, @"propertyName"
puede ser un NSString
compuesto dinámicamente en tiempo de ejecución.
Esta técnica se llama Key Value Coding y es fundamental para Cocoa.
La razón por la que esto es mejor es porque -valueForKey
hará lo que sea necesario para " -valueForKey
" cualquier tipo que la propiedad devuelva a un objeto. Por lo tanto, si la propiedad es de tipo int
, devolverá una instancia de NSNumber
contenga int.
Esto es mucho más fácil de manejar: performSelector
solo funcionará para tipos que encajen en la memoria de un puntero.
Tenga en cuenta que también hay -setValue:forKey:
Sé el nombre de la cadena de una propiedad de un objeto. ¿Cómo podría obtener y configurar esa propiedad usando la cadena?
@synthesize propertyName
automatiza la generación de métodos getter y setter.
El compilador genera
-
- (id)propertyName;
-
- (void)setPropertyName;
Si tiene un selector como NSString, puede usar performSelector:NSSelectorFromString
.
p.ej:
[object performSelector:NSSelectorFromString(@"propertyName") ...]