2009-07-07 12 views
9

¿Cómo puedo invocar un método en tiempo de ejecución en una clase de Objective-C, cuando todo lo que tengo es que es la firma en forma de cadena:La invocación de un método de Objective-C por su nombre

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

Tenga en cuenta que el nombre del método puede cambiar en tiempo de ejecución, pero el número de argumentos permanece fijo, uno en esta instancia.

Respuesta

26

Usted puede usar algo como lo siguiente:

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

También son performSelector:withObject: y métodos performSelector:withObject:withObject: si necesita pasar parámetros.

+10

No se olvide de NSInvocation para cuando necesite más de 2 parámetros. – dreamlax

+0

Si usa 'performSelector: withObject:', asegúrese de finalizar el nombre de su método con dos puntos. El nombre del método sin dos puntos coincide con un método sin parámetros. –

+0

Gracias [dreamlax] (http://stackoverflow.com/users/10320/dreamlax) !. Aquí una [respuesta completa] (http://stackoverflow.com/a/313455/1121497) sobre 'NSInvocation'. –

Cuestiones relacionadas