如果类通过respondsToSelector响应选择器,则检查动态:

时间:2011-05-09 10:21:07

标签: iphone objective-c ios

如果某个类响应选择器,我正在寻找以动态方式检查的可能性。

例如,我在像“parse [CountryCode] Adress”这样的类中有一个严格的方法名称模式。

我尝试过这样的事情:

SEL selector = NSSelectorFromString([NSString stringWithFormat:@"parse%@Address", @"DE"]);

if ([CountryTraderDataParser respondsToSelector:@selector(selector)]) {
    NSLog(@"responds to");
    [CountryTraderDataParser selector];
}

但这不起作用。

使用硬编码行[CountryTraderDataParser respondsToSelector:@selector(parseDEAddress:)],此示例可以正常工作。

还有其他/更好的方法让这个例子起作用吗?

1 个答案:

答案 0 :(得分:15)

selector变量已经是一个选择器(类型SEL),所以你不应该使用@selector()

此外,

[CountryTraderDataParser selector];
除非有一个名为selector的方法,否则

无效。如果您希望对象基于变量选择器执行方法,请使用-[NSObject performSelector:]

SEL selector = NSSelectorFromString([NSString stringWithFormat:@"parse%@Address", @"DE"]);

if ([CountryTraderDataParser respondsToSelector:selector]) {
    NSLog(@"responds to");
    [CountryTraderDataParser performSelector:selector];
}