109 votes

Objective-C - vérifier si il existe une méthode

est-ce là de toute façon que je peux tester si une méthode existe en Objective-C ?

Je suis en train d’ajouter un garde pour voir si mon objet a la méthode avant de l’appeler.

Merci,
Tee

186voto

KennyTM Points 232647
if ([obj respondsToSelector:@selector(methodName:withEtc:)]) {
   [obj methodName:123 withEtc:456];
}

72voto

Il y a aussi le message statique instancesRespondToSelector : sélecteur (SEL) vous l’appelleriez comme ceci :

ou comme ceci :

Cela peut être utile si vous souhaitez appeler un constructeur ou une autre fonction de cela (je veux dire, avant d’avoir l’instance elle-même).

12voto

Carl Norum Points 114072

Utiliser respondsToSelector:. À partir de la documentation:

respondsToSelector:

Renvoie une valeur Booléenne qui indique si le récepteur met en œuvre ou hérite d'une méthode qui permet de répondre à un message spécifié.

- (BOOL)respondsToSelector:(SEL)aSelector

Paramètres
aSelector - Un sélecteur qui permet d'identifier un message.

Valeur De Retour
YES si le récepteur met en œuvre ou hérite d'une méthode qui permet de répondre aux aSelector, sinon, NO.

9voto

Frank Shearar Points 12481

Vous êtes à la recherche pour respondsToSelector:-

if ([foo respondsToSelector: @selector(bar)] {
  [foo bar];
}

Comme Donal dit ci-dessus vous indique que foo peut certainement gérer la réception de la barre de sélection. Toutefois, si toto est un proxy qui transmet bar à certains sous-jacente de l'objet qui doit recevoir le message de la barre, puis respondsToSelector: vous dira PAS, même si le message sera envoyé à un objet qui répond à la barre.

1voto

Eric Points 19

Vérification des sélecteurs avec respondsToSelector est normalement uniquement pour les méthodes du délégué. Vous ne devrait pas utiliser forwardInvocation ou proxies pour les méthodes du délégué. Si vous devez utiliser respondsToSelector dans d’autres situations, vous pouvez s’assurer qu’il n’est pas un moyen plus approprié pour la conception de votre programme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X