2011-06-10 18 views
6

Jak można wywołać selektor o nazwie w NSString * w obiektywnym c? Muszę też zadzwonić do selektora tylko wtedy, gdy cel go zaakceptuje. na przykładDynamiczne wywołanie metody w Objective-C

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

Kiedy zadzwonić callMethod: @"Foo" onObject: obj razie obj narzędzi Foo następnie [obj Foo] powinien być nazywany, jeżeli nie realizuje go, nic nie powinno się zdarzyć.

Odpowiedz

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

Po pierwsze, należy użyć metody NSSelectorFromString() przekonwertować ciąg do nazwy metody, tak jak poniżej:

SEL methodToCall = NSSelectorFromString(stringToConvertToMethod);

Następnie należy sprawdzić metodą na odbiorniku i wywołać metodę, jeśli istnieje:

if ([receiver respondsToSelector:methodToCall]) { 

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

} 

Zwróć uwagę, że potencjalnym minusem jest to, że nie będziesz w stanie przekazać argumentów. Aby przekazać argument, należy wywołać metodę NSObject performSelector:withObject:. Za przekazanie dwóch argumentów, performSelector:withObject:withObject:.