208 votes

type de récepteur *** par exemple le message est une déclaration avant

Dans mon application iOS5, j'ai NSObject %% States class, et j'essaie de l'initialiser:

 states = [states init];
 

voici init méthode en States :

 - (id) init
{
    if ((self = [super init]))
    {
        pickedGlasses = 0;
    }

    return self;
}
 

Mais il y a une erreur dans la ligne states = [states init];

type de récepteur "Etats" par exemple message est une déclaration avant

Qu'est-ce que ça veut dire? Qu'est-ce que je fais mal?

452voto

Catfish_Man Points 15439

Fondamentalement, cela signifie que vous devez importer le fichier .h qui contient la déclaration des États.

Cependant, il y a beaucoup d’autre trucs de mal avec votre code.

  • Vous êtes - init'ing un objet sans + alloc'ing il. Cela ne fonctionne pas
  • Vous êtes déclarer un objet comme un type non pointeur, ce qui ne fonctionne pas non plus
  • Vous appelez pas [super init] dans - init.

27voto

capikaw Points 1167

FWIW, j’ai eu cette erreur quand je fus mise en œuvre dans des données de base à un projet existant. Il s’est avéré que j’ai oublié de CoreData.h un lien vers mon projet. J’avais déjà ajouté le framework CoreData à mon projet mais résolu le problème en reliant le cadre dans mon en-tête précompilé comme modèles d’Apple :

25voto

Stunner Points 3580

J'ai eu ce genre de message quand j'avais deux fichiers qui dépendent les uns des autres. La chose la plus délicate ici c'est que vous obtiendrez une référence circulaire si vous essayez d'importer les uns des autres (de classe A, les importations de la classe B, classe B les importations de classe A), à partir de leurs fichiers d'en-tête. Donc ce que vous devriez faire est de mettre à la place d'un forward (@class A) de la déclaration dans l'une des classes (classe B) fichier d'en-tête. Toutefois, lorsque vous essayez d'utiliser un ivar de catégorie A dans la mise en œuvre de la classe B, cette erreur vient d'en haut, par le simple ajout d'un #import "A.h" dans la .m fichier de classe B résolu le problème pour moi.

6voto

Arslan Points 329

Vous utilisez

où que vous devez utiliser

Votre méthode init devrait être comme ceci

Maintenant, enfin quand vous allez créer un objet de classe d’États vous devriez le faire comme ça.

Je ne dis pas que c’est le meilleur moyen d’y parvenir. Mais il peut vous aider à comprendre l’utilisation très basique de l’initialisation d’objets.

3voto

nemesis Points 589

Vérifiez si vous avez importé les fichiers d’en-tête des classes qui jettent cette erreur.

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