168 votes

Comment se débarrasser de la ' non déclaré sélecteur ' AVERTISSEMENT

** Maintenant, cette question doit être dupe, mais je ne le trouve pas. Redirection apprécié! **

Je veux utiliser un sélecteur sur une NSObject exemple , sans la nécessité d'une mise en oeuvre de protocole. Par exemple, il y a une catégorie de la méthode qui devrait fixer une erreur de propriété si le NSObject exemple, il est appelé sur la prend en charge. C'est le code, et le code fonctionne comme prévu:

if ([self respondsToSelector:@selector(setError:)])
{
    [self performSelector:@selector(setError:) withObject:[NSError errorWithDomain:@"SomeDomain" code:1 userInfo:nil]];
}

Cependant, le compilateur ne voit pas de méthode autour de avec la setError: signature, donc il me donne un avertissement, pour chaque ligne contient l' @selector(setError:) extrait:

Undeclared selector 'setError:'

Je ne veux pas avoir à déclarer un protocole pour se débarrasser de cet avertissement, car je ne veux pas que toutes les classes qui peuvent l'utiliser pour mettre en œuvre quelque chose de spécial. Juste par convention, je veux qu'ils aient une setError: méthode ou propriété.

Est-ce faisable? Comment?

Cheers,
EP

260voto

Klaas Points 2995

Une autre option serait de désactiver l’avertissement avec :

Vous pouvez placer cette ligne dans le fichier ".m" où l’avertissement se produit.

Mise à jour :

Il fonctionne également avec LLVM comme ceci :

202voto

sergio Points 52422

Jetez un oeil à NSSelectorFromString.

Il vous permettra de créer un sélecteur lors de l’exécution, plutôt qu’au moment de la compilation à travers le `` mot clé et le compilateur n’auront aucune chance de se plaindre.

53voto

Jacob Relkin Points 90729

Je pense que c’est parce que pour une raison étrange le sélecteur n’est pas enregistré avec le runtime.

Essayez d’enregistrer via le sélecteur de `` :

7voto

i_mush Points 105

Si votre classe implémente la setError : méthode (même en déclarant dynamique l’accesseur Set de la propriété error éventuelle) vous pouvez le déclarer dans votre fichier d’interface (.h), ou si vous n’aimez pas à le montrer de cette façon vous pouvez essayer avec le truc difficile PrivateMethods :

juste avant votre @implementation, cela doit cacher les avertissements ;).

7voto

Mark Patterson Points 133

J’ai eu ce message s’en aller par #include'ing le fichier avec la méthode. Rien d’autre a été utilisée à partir de ce fichier.

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