2010-01-18 4 views

Répondre

13

Les Objective-C Runtime Reference listes

Ivar class_getInstanceVariable(Class cls, const char * name) 

qui retourne un type opaque représentant une variable d'instance dans une classe. Vous passez ensuite à

id object_getIvar(id object, Ivar ivar) 

pour obtenir la variable d'instance réelle. Donc vous pouvez dire

#import <objc/runtime.h> 

id getInstanceVariable(id x, NSString * s) 
{ 
    Ivar ivar = class_getInstanceVariable([x class], [s UTF8String]); 
    return object_getIvar(x, ivar); 
} 

si la variable d'instance est un objet. Toutefois, si la variable d'instance n'est pas un objet, appelez

Ivar object_getInstanceVariable(id obj, const char * name, void ** outValue) 

en passant dans un pointeur vers une variable du type droit. Par exemple, si la variable d'instance est un int,

int num; 
object_getInstanceVariable(x, [s UTF8String], (void**)&num); 

tournerai num à la valeur de la variable d'instance entière.

+0

En fait, object_getIvar prend un Ivar pour le second argument. – Casebash

+2

Utilisez Ivar class_getInstanceVariable (classe cls, const char * nom) pour que l'Ivar puisse passer – Casebash

+0

Tout à fait raison! +1 Casebash –

5

à condition que x est la valeur clé de codage conforme pour la propriété a, vous pouvez simplement faire ceci:

id result = [x valueForKey:s] 
+0

À retenir – Casebash

Questions connexes