2011-05-09 18 views
5

我要尋找一個可能性以動態的方式來檢查,如果一個類來響應一個選擇。檢查是否動態類響應由respondsToSelector選擇:

對於exampel我有方法名的類中的一個嚴格的模式,如「解析[COUNTRYCODE]住址」。

我tryed是這樣的:

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

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

但這不起作用。

用一個硬編碼線[CountryTraderDataParser respondsToSelector:@selector(parseDEAddress:)]這個例子正常工作。

是否有其他/更好的方式來得到這個exampel工作?

+0

我想你應該刪除'@ selector',因爲它已經是一個選擇器。 – MByD 2011-05-09 10:24:28

回答

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]; 
}