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

Je me demande juste s'il existe un moyen d'appeler une méthode où je construis 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 cela, je l'appellerais normalement comme

[self loadData];

Mais je veux pouvoir l'appeler dynamiquement avec une chaîne par exemple

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

Ceci est un exemple stupide mais j'espère que vous comprenez mon point. Je l'utilise pour les classes de liaison de données que je configure pour mon application 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

70
demandé sur IPadHackAndSlash 2010-12-15 08:05:58

3 réponses

, Vous pouvez essayer quelque chose comme

SEL s = NSSelectorFromString(selectorName);
[anObject performSelector:s];
100
répondu shreyasva 2010-12-15 05:12:38

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

objc_msgSend(self, someSelector);

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

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

La méthode prend un nombre variable d'arguments, de sorte que vous pouvez envoyer des messages avec n'importe quel nombre d'arguments.

NSString *message = [self getSomeSelectorNameWithManyArguments];
objc_msgSend(self, message, arg1, arg2, arg3, arg4);
11
répondu Adam Milligan 2010-12-15 05:16:40

Vous avez besoin NSSelectorFromString.

7
répondu Carl Norum 2010-12-15 05:09:57