2011-05-09 8 views
5

Estoy buscando la posibilidad de verificar de forma dinámica si una clase responde a un selector.comprueba la dinámica si una clase responde a un selector responddsToSelector:

Para el examen Tengo un esquema estricto de nombres de métodos en una clase como "parse [CountryCode] Dirección".

He probado algo como esto:

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

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

pero esto no funciona.

Con una línea codificada [CountryTraderDataParser respondsToSelector:@selector(parseDEAddress:)] este ejemplo funciona bien.

¿Hay alguna otra forma mejor de hacer que este examen funcione?

+0

Creo que deberías eliminar '@ selector', ya que es un selector. – MByD

Respuesta

15

La variable selector ya es un selector (tipo SEL), por lo que no debe usar @selector().

Además,

[CountryTraderDataParser selector]; 

no es válida a menos que haya un método llamado selector. Si desea que un objeto ejecute un método basado en un selector de variables, use -[NSObject performSelector:].

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

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