2011-06-10 16 views
6

Come posso chiamare un selettore con il suo nome in NSString * nell'obiettivo c? Devo anche chiamare il selettore solo se il target lo accetterà. per esempio.Chiamata di metodo dinamico in Objective-C

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

Quando chiamo callMethod: @"Foo" onObject: obj se obj attrezzi Foo poi [obj Foo] dovrebbe essere chiamato, se non implementa, niente dovrebbe accadere.

risposta

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

In primo luogo, si utilizza il metodo NSSelectorFromString() per convertire la stringa in un nome di metodo, in questo modo:

SEL methodToCall = NSSelectorFromString(stringToConvertToMethod);

Poi, si controlla per il metodo sul ricevitore e chiama il metodo, se esiste:

if ([receiver respondsToSelector:methodToCall]) { 

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

} 

Basta notare che uno svantaggio potenziale è che non sarà possibile passare argomenti. Per passare un argomento, chiameresti il ​​metodo NSObject performSelector:withObject:. Per passare due argomenti, performSelector:withObject:withObject:.

Problemi correlati