2009-07-07 5 views
9

Comment puis-je appeler une méthode à l'exécution sur une classe Objective-C quand j'ai est-ce est la signature sous forme de chaîne:Invoquer une méthode Objective-C par nom

NSString* typeName = @"Widgets"; 
NSString* methodName = [NSString stringWithFormat:@"add%@Object:", typeName]; 

Notez que le nom de la méthode peut changer à l'exécution, mais le nombre d'arguments reste fixe - un dans cette instance.

Répondre

26

Vous pouvez utiliser quelque chose comme ce qui suit:

SEL selector = NSSelectorFromString(methodName); 
[myObject performSelector:selector]; 

Il y a aussi performSelector:withObject: et performSelector:withObject:withObject: méthodes si vous avez besoin de passer des paramètres.

+10

N'oubliez pas NSInvocation lorsque vous avez besoin de plus de 2 paramètres. – dreamlax

+0

Si vous utilisez 'execSelector: withObject:', assurez-vous de terminer le nom de votre méthode par deux points. Le nom de la méthode sans deux-points correspond à une méthode sans paramètre. –

+0

Merci [dreamlax] (http://stackoverflow.com/users/10320/dreamlax) !. Voici une [réponse complète] (http://stackoverflow.com/a/313455/1121497) à propos de 'NSInvocation'. –

Questions connexes