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
3 réponses
, Vous pouvez essayer quelque chose comme
SEL s = NSSelectorFromString(selectorName);
[anObject performSelector:s];
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);