如何在目標c中調用其名稱爲NSString *
的選擇器?我只需要在目標接受它時調用選擇器。例如動態方法調用Objective-C
+(void) callMethod: (NSString *) method onObject: (id) object
{
// do some magic
}
當我打電話callMethod: @"Foo" onObject: obj
如果obj
工具Foo
然後[obj Foo]
應該叫,如果沒有實現它,沒有什麼應該發生。
如何在目標c中調用其名稱爲NSString *
的選擇器?我只需要在目標接受它時調用選擇器。例如動態方法調用Objective-C
+(void) callMethod: (NSString *) method onObject: (id) object
{
// do some magic
}
當我打電話callMethod: @"Foo" onObject: obj
如果obj
工具Foo
然後[obj Foo]
應該叫,如果沒有實現它,沒有什麼應該發生。
SEL selector = NSSelectorFromString(method);
if ([object respondsToSelector:selector]) {
[object performSelector:selector];
}
首先,您使用NSSelectorFromString()
方法將字符串轉換成一個方法的名稱,像這樣:
SEL methodToCall = NSSelectorFromString(stringToConvertToMethod);
然後,您檢查接收器上的方法,並調用,如果該方法它存在:
if ([receiver respondsToSelector:methodToCall]) {
// Method exists, call it.
[receiver performSelector:methodToCall];
}
請注意,潛在的缺點是您將無法傳遞參數。爲了傳遞參數,你可以調用NSObject方法performSelector:withObject:
。傳遞兩個參數,performSelector:withObject:withObject:
。