2011-06-10 34 views
6

如何在目標c中調用其名稱爲NSString *的選擇器?我只需要在目標接受它時調用選擇器。例如動態方法調用Objective-C

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

當我打電話callMethod: @"Foo" onObject: obj如果obj工具Foo然後[obj Foo]應該叫,如果沒有實現它,沒有什麼應該發生。

回答

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

首先,您使用NSSelectorFromString()方法將字符串轉換成一個方法的名稱,像這樣:

SEL methodToCall = NSSelectorFromString(stringToConvertToMethod);

然後,您檢查接收器上的方法,並調用,如果該方法它存在:

if ([receiver respondsToSelector:methodToCall]) { 

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

} 

請注意,潛在的缺點是您將無法傳遞參數。爲了傳遞參數,你可以調用NSObject方法performSelector:withObject:。傳遞兩個參數,performSelector:withObject:withObject: