72 votes

Méthode d'appel Objective C dynamiquement avec une chaîne

Im me demandais si il existe un moyen d'appeler une méthode où j'ai créer le nom de la méthode à la volée avec une chaîne.

par exemple, j'ai une méthode appelée loaddata

-(void)loadData;

pour appeler ce que je serait normalement l'appeler comme

[self loadData];

Mais je veux être capable de l'appeler dynamiquement avec une chaîne de caractères par exemple

NSString *methodName = [[NSString alloc] initWithString:@"loadData"];
[self methodName];

C'est un exemple stupide mais j'espère que vous comprenez mon point. Je l'utilise pour la liaison de données les classes que je suis en train de up pour mon application pour IPad. Difficile à expliquer mais pour l'obtenir à feu j'ai besoin de travailler sur la façon d'appeler une méthode avec une chaîne.

Des idées?

Merci

103voto

shreyasva Points 3485

Vous pouvez essayer quelque chose comme

 SEL s = NSSelectorFromString(selectorName);
[anObject performSelector:s];
 

12voto

Adam Milligan Points 2450

Vous pouvez utiliser la fonction objc_msgSend. Il faut deux paramètres, le récepteur et le sélecteur pour lui envoyer:

 objc_msgSend(self, someSelector);
 

Vous devrez transformer votre chaîne en sélecteur approprié en utilisant NSSelectorFromString :

 NSString *message = [self getSomeSelectorName];
objc_msgSend(self, message);
 

La méthode prend également un nombre variable d'arguments, vous pouvez donc envoyer des messages avec un nombre quelconque d'arguments.

 NSString *message = [self getSomeSelectorNameWithManyArguments];
objc_msgSend(self, message, arg1, arg2, arg3, arg4);
 

7voto

Carl Norum Points 114072

Vous avez besoin de NSSelectorFromString .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X