2010-10-05 5 views
5

Comment vérifier la signature du sélecteur ou si le sélecteur nécessite ou non des paramètres?Détecter la signature du sélecteur

E.g. Je veux vérifier si le sélecteur est de type
-(void) method
ou
-(void) method:(id)param

+3

Notez que 'method' et' method: 'sont considérés comme un sélecteur différent. – Yuji

+3

Je dois demander; Qu'essayez-vous de faire?!? – bbum

+0

J'écris une application utilisée comme cadre de test. – Egil

Répondre

0

Vous pouvez le vérifier en utilisant respondsToSelector:, à savoir quelque chose comme ceci:

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

Vous pouvez obtenir beaucoup d'informations sur un sélecteur particulier avec 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

'[[obj class] instanceMethodSignatureForSelector: selector]' peut être écrit comme '[obj methodSignatureForSelector: selector]' – user102008

Questions connexes