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

cra*_*bus 5 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];
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

使用硬编码线,[CountryTraderDataParser respondsToSelector:@selector(parseDEAddress:)]此示例工作正常.

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

小智 15

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

也,

[CountryTraderDataParser selector];
Run Code Online (Sandbox Code Playgroud)

除非有一个名为的方法,否则无效selector.如果您想要一个对象来执行基于变量选择器的方法,请使用-[NSObject performSelector:].

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

if ([CountryTraderDataParser respondsToSelector:selector]) {
    NSLog(@"responds to");
    [CountryTraderDataParser performSelector:selector];
}
Run Code Online (Sandbox Code Playgroud)