web-dev-qa-db-fra.com

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

Je me demande simplement 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;

d'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 comprendrez mon point. Je l'utilise pour les classes de liaison de données que je configure pour mon application IPad. Difficile à expliquer mais pour le faire fonctionner, j'ai besoin de savoir comment appeler une méthode avec une chaîne.

Des idées?

Merci

72
IPadHackAndSlash

Vous pouvez essayer quelque chose comme

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

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 n'importe quel nombre d'arguments.

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

Vous avez besoin de NSSelectorFromString .

7
Carl Norum