2011-06-10 4 views
6

Comment appeler un sélecteur avec son nom dans NSString * dans l'objectif c? Je dois également appeler le sélecteur seulement si la cible l'acceptera. par exemple.Appel de méthode dynamique dans Objective-C

+(void) callMethod: (NSString *) method onObject: (id) object 
{ 
    // do some magic 
} 

Quand j'appelle callMethod: @"Foo" onObject: obj si obj met en œuvre Foo alors [obj Foo] devrait être appelée, si elle ne met pas en œuvre, rien ne devrait se produire.

Répondre

15
SEL selector = NSSelectorFromString(method); 
if ([object respondsToSelector:selector]) { 
    [object performSelector:selector]; 
} 
6

D'abord, vous utilisez la méthode NSSelectorFromString() pour convertir la chaîne en un nom de méthode, comme ceci:

SEL methodToCall = NSSelectorFromString(stringToConvertToMethod);

Ensuite, vous vérifiez la méthode sur le récepteur et appelez la méthode si il existe:

if ([receiver respondsToSelector:methodToCall]) { 

    // Method exists, call it. 
    [receiver performSelector:methodToCall]; 

} 

Notez simplement qu'un inconvénient potentiel est que vous ne serez pas en mesure de transmettre des arguments. Pour passer un argument, vous appelez la méthode NSObject performSelector:withObject:. Pour passer deux arguments, performSelector:withObject:withObject:.