De toute façon pour obtenir la chaîne de nom de variable?
Dire que j'ai ma classe
@interface Person : NSObject { NSString *name; }
J'ai besoin d'obtenir le nom de NSString est dans ma classe
Person *person = [[Person alloc] init];
NSLog(@"Name of variable %s\n", _NameofVariable_(person->name));
Merci pour les réponses, voici la solution que j'ai trouvé les réponses
//returns nil if property is not found
-(NSString *)propertyName:(id)property {
unsigned int numIvars = 0;
NSString *key=nil;
Ivar * ivars = class_copyIvarList([self class], &numIvars);
for(int i = 0; i < numIvars; i++) {
Ivar thisIvar = ivars[i];
if ((object_getIvar(self, thisIvar) == property)) {
key = [NSString stringWithUTF8String:ivar_getName(thisIvar)];
break;
}
}
free(ivars);
return key;
}
- vous devez également
free(ivars)
, ou bien vous allez à la fuite de la matrice. - bonne prise, mis à jour pour refléter ce fait.
- Ne cela il suffit de retourner le nom de la première de tout bien à la classe qui correspond à la valeur que vous transmettez? Exemple: gist.github.com/robskillington/684796bae2dd95592919
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir le nom d'une classe de variables d'instance, avec la Objective-C runtime API fonction
class_copyIvarList
. Cependant, c'est assez complexe, fait rarement, et presque jamais le meilleur moyen d'accomplir quelque chose. Si vous avez un objectif plus précis à l'esprit que la simple curiosité, il pourrait être une bonne idée de demander à propos de la manière de l'accomplir en Objective-C.Aussi, incidemment,
person.name
ne spécifiez pas une variable d'instance en Objective-C — c'est un appel de propriété. La variable d'instance seraitperson->name
.person->name
idiome, car alorsperson.name
prend avantage de néant comportement d'objet et de tout simplement de retournil
siperson
estnil
,person->name
sera susceptible de se bloquer siperson
estnil
, tout comme bon ol' C ou C++.Aussi facile que
#define VariableName(arg) (@""#arg)
Alors vous n':
Vous pouvez utiliser le préprocesseur stringification et un peu de ficelle se tourner:
Si la personne objet est exposé comme une propriété de la classe, vous pouvez utiliser objc_msgSend pour obtenir la valeur.
Donc, si vous pouvez avoir accès à personne à l'aide de
Vous pouvez également faire de
Pour plus de détails sur l'envoi d'un message, y compris la façon de passer des arguments aux méthodes, voir les Objective-C Runtime Guide de Programmation de la section sur la Messagerie
Les ouvrages suivants, comme une macro: