2010-10-05 19 views
5

Jak mogę sprawdzić sygnaturę selektora lub czy selektor wymaga parametrów, czy nie?Wykrywanie podpisu selektora

E.g. Chcę sprawdzić, czy przełącznik jest typu
-(void) method
lub
-(void) method:(id)param

+3

Zauważ, że 'method' i' method: 'są traktowane jako inny selektor. – Yuji

+3

Muszę zapytać; co próbujesz zrobić?!? – bbum

+0

Piszę aplikację używaną jako szkielet testowy. – Egil

Odpowiedz

0

Można to sprawdzić za pomocą respondsToSelector:, czyli coś takiego:

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

można uzyskać wiele informacji na temat konkretnego selektora z klasą 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

'[[klasa obiektu] instancjaMethodSignatureForSelector: selektor]' może być zapisana jako '[obj methodSignatureForSelector: selector]' – user102008