37 votes

Comment résoudre le sélecteur #39;non reconnu envoyé à l'instance #39;?

Dans l'AppDelegate, je suis alloc qui pratiquent une instance définie dans une bibliothèque statique. Cette instance a un NSString propriété de définir une "copie". Lorsque j'accède à la chaîne de propriété sur cet exemple, l'application se bloque avec "méconnu sélecteur envoyé à l'instance". Xcode fournit un code astuce pour la propriété, ce qui signifie qu'il est connu dans l'application appelante. La catégorie particulière est compilé en statique de la bibliothèque de la cible. Ce qui me manque?

Ajouter un peu de code.

//static library 
//ClassA.h
@interface ClassA : NSObject {
...
NSString *downloadUrl;
}
@property(nonatomic, copy) NSString *downloadUrl;

//ClassA.m
@synthesize downloadUrl;

Dans l'appel de l'application appDelegate.

//app delegate header file
@interface myApp : NSObject <UIApplicationDelegate> {
ClassA *classA;
}
@property (nonatomic, retain) ClassA *classA;

//app delegate .m file
@synthesize classA;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
classA = [[ClassA alloc] init];
//exception occurs here.  downloadUrl is of type NSCFNumber
classA.downloadUrl = @"http://www.abc.com/";
...}

Autres classes de l'application permettra d'obtenir une référence au délégué et appel classA.downloadUrl.

26voto

stefanB Points 27796

1) La synthèse est-elle dans `` un bloc?

2) Devriez-vous vous référer `` et au lieu de ```` plaine?

3) Dans votre fichier, vous devez importer , quand il manque, il sera par défaut à un nombre, ou pointeur? (dans les variables C par défaut à int si elle n'est pas trouvée par compilateur) :

``.

19voto

mihir mehta Points 8182

Définissez le drapeau -ObjC dans le drapeau d'autre lien dans votre paramètre de projet... (Pas dans le projet de bibliothèque statique, mais le projet que vous qui utilise la bibliothèque statique ...) Et assurez-vous que dans le réglage du projet Configuration est défini à toutes les configurations

15voto

Dave Kaye Points 355

Beaucoup de gens ont donné des réponses à cette questions et d'autres semblables, mais je pense que c'est plus simple. Parfois, si vous ne payez pas l'attention d'un sélecteur vous n'avez pas l'intention d'utiliser peut être attaché à quelque chose dans l'interface. Vous pouvez recevoir ce message d'erreur parce que le sélecteur est là, mais vous n'avez pas écrit tout le code.

La façon la plus simple de vérifier que ce n'est pas le cas pour le contrôle-cliquez sur l'élément de sorte que vous pouvez voir tous les sélecteurs qui y sont associées. Si il n'y a rien là-dedans que vous ne voulez pas, se débarrasser d'elle! Espérons que cela aide...

1voto

Chuck Points 138930

Dans le code que vous avez posté, vous envoyez le setter à - c'est-à-dire, la classe elle-même. Vous souhaitez définir la propriété d'une instance.

1voto

Heat Miser Points 6305

Comment importez-vous la classe A dans votre classe AppDelegate ? Avez-vous inclus le fichier .h dans le projet principal? J'ai eu ce problème pendant un certain temps parce que je n'ai pas copier le fichier d'en-tête dans le projet principal ainsi que la #include normale "ClassA.h."

Copier, ou la création de la .h résolu pour moi.

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