iphone - significado - Método de llamada Objective C dinámicamente con una cadena
ios versiones (3)
Necesita NSSelectorFromString
.
Me pregunto si hay una manera de llamar a un método donde construyo el nombre del método sobre la marcha con una cadena.
por ejemplo, tengo un método llamado loaddata
-(void)loadData;
para llamar a esto, normalmente lo llamaría así
[self loadData];
Pero quiero poder llamarlo dinámicamente con una cadena, por ejemplo
NSString *methodName = [[NSString alloc] initWithString:@"loadData"];
[self methodName];
Este es un ejemplo estúpido, pero espero que entiendas mi punto. Lo estoy usando para las clases de enlace de datos que estoy configurando para mi aplicación de IPad. Difícil de explicar, pero para que funcione, necesito resolver cómo llamar a un método con una cadena.
¿Algunas ideas?
Gracias
Puede usar la función objc_msgSend. Se necesitan dos parámetros, el receptor y el selector para enviarlo:
objc_msgSend(self, someSelector);
Tendrá que convertir su cadena en el selector apropiado usando NSSelectorFromString
:
NSString *message = [self getSomeSelectorName];
objc_msgSend(self, message);
El método también toma una cantidad variable de argumentos, por lo que puede enviar mensajes con cualquier cantidad de argumentos.
NSString *message = [self getSomeSelectorNameWithManyArguments];
objc_msgSend(self, message, arg1, arg2, arg3, arg4);
Puedes intentar algo como
SEL s = NSSelectorFromString(selectorName);
[anObject performSelector:s];