2009-12-28 16 views

Respuesta

48

Mientras @weichsel es correcta, hay una manera mejor.

Uso:

[anObject valueForKey: @"propertyName"]; 

y

[anObject setValue:value forKey:@"propertyName"]; 

Obviamente, @"propertyName" puede ser un NSString que se compone de forma dinámica en tiempo de ejecución.

Esta técnica se llama Key Value Coding y es fundamental para Cocoa.

Por qué esto es mejor es porque -valueForKey hará lo que sea necesario para "encajonar" cualquier tipo que la propiedad regrese a un objeto. Por lo tanto, si la propiedad es del tipo int, devolverá una instancia NSNumber que contiene el int.

Esto es mucho más fácil de tratar - performSelector se única trabajo para tipos que suceden para encajar en el valor de un puntero de memoria.

Tenga en cuenta que también hay -setValue:forKey:.

+0

¡Muy útil! No lo sabía –

2

@synthesize propertyName automatiza la generación de métodos getter y setter.

El compilador genera

  • - (id)propertyName;
  • - (void)setPropertyName;

Si usted tiene un selector como NSString, puede utilizar performSelector:NSSelectorFromString.
ej .:
[object performSelector:NSSelectorFromString(@"propertyName") ...]

+1

Deberá usar 'performSelector: withObject:' para establecer la propiedad. –

Cuestiones relacionadas