2010-06-20 4 views
3

J'ai un problème avec performSelector. Cela fonctionne si j'appelle une méthode sans paramètres, mais elle n'appelle même pas la méthode si je passe un paramètre.Objective-C performSelector n'appelle pas de méthode avec le paramètre

Exemple:

- (void)test 
{ 
NSLog(@"test"); //it works!! 
}  
... 
[self performSelector:@selector(test) withObject:nil afterDelay:1.0]; 


- (void)switchOn:(NSNumber *) index 
{ 
NSLog(@"switchOn"); //it doesn't work :-(
} 
.... 
NSLog(@"int is %d", [((NSNumber *)obj) intValue]); //print the correct value 
[self performSelector:@selector(switchOn:) withObject:obj afterDelay:1.0]; 

Je reçois aucune erreur ni. Où pourrait-il être le problème?

grâce

Répondre

3

Quel est le type de paramètre pour le SwitchON: sélecteur?

Il doit être de type id autrement performSelector withObject: ne fonctionnera pas. Pour citer les documents:

unSelecteur doit identifier une méthode qui prend un seul argument de type id. Pour les méthodes avec autres types d'argument et les valeurs de retour, utilisez NSInvocation.

2

performSelectorWithObject: envoie un message au sélecteur avec l'objet que vous avez fourni en tant que premier argument. La méthode de réception doit accepter un seul paramètre de type id. Pour toute autre utilisation, utilisez NSInvocation.

Vous voudrez peut-être consulter un similar question à ce sujet.

0

Essayez d'utiliser:

- (void)switchOn:(id)index 
+0

-1 parce que ce qui est probablement la pire façon possible de formuler la réponse que je peux imaginer. Il ne devrait pas être obligé de redéfinir son interface s'il veut appeler dynamiquement un sélecteur - ce qu'il veut, c'est un moyen d'appeler n'importe quel sélecteur arbitraire. – ivans

+0

@ivans: Je peux me tromper, mais vous ne dites pas fondamentalement la même chose sans code? La méthode doit prendre un paramètre avec le type 'id'. De quelle autre manière y a-t-il d'autres changements à la signature de la méthode? –

+0

Il demande "comment invoquer cette chose que j'ai déjà écrite?" Je suis sûr qu'il ne veut pas savoir à propos de changer son code, ou il l'aurait adapté pour être appelé sans paramètres. Par conséquent, j'ai supposé qu'il voulait que quelqu'un lui dise que NSInvocation existe. – ivans

Questions connexes