2010-10-05 23 views
5

Come posso controllare la firma del selettore o se il selettore richiede o meno parametri?Rileva la firma del selettore

E.g. Voglio verificare se il selettore è di tipo
-(void) method
o
-(void) method:(id)param

+3

Si noti che 'metodo' e' metodo: 'sono considerati come un diverso selettore. – Yuji

+3

Devo chiedere; Cosa stai cercando di fare?!? – bbum

+0

Sto scrivendo un'app utilizzata come framework di test. – Egil

risposta

0

È possibile controllare questo usando respondsToSelector:, vale a dire qualcosa di simile:

if ([myObject respondsToSelector:@selector(doSomethingWithOneArgument:)]){ 
    .... 
} 
8

È possibile ottenere un sacco di informazioni su un particolare di selezione con la classe NSMethodSignature:

id obj = ... 
SEL selector = ... 

NSMethodSignature *signature = [obj methodSignatureForSelector:selector]; 
NSUInteger args = [signature numberOfArguments]; 
int i; 
for(i = 0; i < args; i++) 
    printf("argument type at index %d: %c", i, [signature getArgumentTypeAtIndex:i]); 
+1

'[[classe obj] instanceMethodSignatureForSelector: selector]' può essere scritto come '[obj methodSignatureForSelector: selector]' – user102008

Problemi correlati