如果某个类响应选择器,我正在寻找以动态方式检查的可能性。
例如,我在像“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:)]
,此示例可以正常工作。
还有其他/更好的方法让这个例子起作用吗?
答案 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];
}