Je suis un peu perplexe et je travaille sur ce sujet depuis des heures et googling sans réelles pistes. Je souhaite créer un rappel dans Objective-C pour mon application iPhone en utilisant le @selector.@selector dans objectif-c ne se comporte pas comme prévu
Classe 1:
- (void) someMethod {
// create selector
SEL successCallback = @selector(successMethod);
// call some service with caller and selector
[class2 dispatchSomeEvent:self callback:successCallback];
// here's the call back method
- (void) successMethod {
NSLog(@"Callback success");
}
}
Classe 2:
// some event
- (void) dispatchSomeEvent:(id) caller selector:(SEL) successCallback {
// catch the event and execute callback
if ([caller respondsToSelector:successCallback]) {
[caller successCallback];
}
}
Le respondsToSelector conditionnel passera mais le rappel sur la ligne suivante échouera. Cependant, si je le ferais comme ceci:
// catch the event and execute callback
if ([caller respondsToSelector:successCallback]) {
[caller successMethod];
}
Ainsi, au lieu d'utiliser le sélecteur je suis passé, je tape le nom de méthode directement ... et ça marche!
L'erreur que je reçois est la suivante:
sélecteur non reconnu envoyé à l'instance 0x6c37f70
Qu'est-ce qui se passe ici ??
Merci d'avance!
Le compilateur doit être vomissant un avertissement que l'appelant ne répond pas à successMethod. – bbum
Le rappel 'successMethod' devrait vous donner une erreur de syntaxe si ce code est verbatim. Vous ne pouvez pas définir de méthodes dans d'autres méthodes. – JeremyP