如何在目标c中调用名称为NSString *
的选择器?我还需要在目标接受它时才调用选择器。 e.g。
+(void) callMethod: (NSString *) method onObject: (id) object
{
// do some magic
}
如果callMethod: @"Foo" onObject: obj
实施obj
Foo
,则应调用[obj Foo]
,然后调用{{1}},如果没有实现,则不会发生任何事情。
答案 0 :(得分:15)
SEL selector = NSSelectorFromString(method);
if ([object respondsToSelector:selector]) {
[object performSelector:selector];
}
答案 1 :(得分:6)
首先,使用NSSelectorFromString()
方法将字符串转换为方法名称,如下所示:
SEL methodToCall = NSSelectorFromString(stringToConvertToMethod);
然后,检查接收器上的方法并调用方法(如果存在):
if ([receiver respondsToSelector:methodToCall]) {
// Method exists, call it.
[receiver performSelector:methodToCall];
}
请注意,潜在的缺点是你无法传递参数。要传递参数,可以调用NSObject方法performSelector:withObject:
。传递两个参数performSelector:withObject:withObject:
。