2009-07-07 4 views
9

Come posso invocare un metodo in fase di esecuzione su una classe Objective-C, quando tutto quello che ho è che è firma in forma di stringa:Invocare un metodo di Objective-C per nome

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

Si noti che il nome del metodo può cambiare in fase di esecuzione ma il numero di argomenti rimane fisso, uno in questo caso.

risposta

26

Si può usare qualcosa di simile a quanto segue:

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

Ci sono anche performSelector:withObject: e performSelector:withObject:withObject: metodi se è necessario passare i parametri.

+10

Non dimenticare NSInvocation per quando sono necessari più di 2 parametri. – dreamlax

+0

Se si utilizza 'performSelector: withObject:', assicurarsi di terminare il nome del metodo con due punti. Il nome del metodo senza due punti corrisponde a un metodo senza parametri. –

+0

Grazie [dreamlax] (http://stackoverflow.com/users/10320/dreamlax) !. Ecco una [risposta completa] (http://stackoverflow.com/a/313455/1121497) su 'NSInvocation'. –