"Impossible de trouver l'erreur de déclaration d'interface ..." après @class
J'ai couru dans un Objectif-C problème qui ne semble pas avoir aucun sens pour moi. Je suis relativement bien versé ObjC programmeur et de comprendre l'ensemble de la "déclaration anticipée" concept, mais celui-ci m'a permis de me gratter la tête. Donc voici l'affaire:
ClassA est une classe de ma Xcode projet qui est un projet uniquement.
ClassB est une sous-classe de ClassA qui est publique et qui est importé dans mon cadre de l'en-tête.
Je suis "Impossible de trouver l'interface de déclaration pour les "ClassA', qui est une superclasse de "ClassB'..." erreur lors de la construction. J'ai déjà mis le @class ClassA;
de l'avant dans la déclaration de ClassB.h, mais cela ne semble pas résoudre le problème. Lorsque je change la @class ClassA;
à #import ClassA.h
il fonctionne très bien. Cependant, depuis ClassA projet seulement, dépendant de projets ne peut pas construire ClassB, car il ne peut pas accéder ClassA à la source.
Toute aide serait appréciée et j'espère qu'un sens. Merci!
source d'informationauteur Grimless | 2010-08-07
Vous devez vous connecter pour publier un commentaire.
À la sous-classe d'une classe de super-classe de l'intégralité de la déclaration doit être disponible pour le compilateur.
@class
permet seulement des références à des instances de classe dit -- permetA *foo;
.Sous-classement nécessite plus de métadonnées (au moins, il n'en vertu de l'héritage d'exécution -- je pense il pourrait être possible de soutenir des sous-classement sans le super @interface. Techniquement possible, mais probablement pas utile.)
Le problème, c'est que vous avez une boucle infinie dans votre #importations.
La solution: tous #les importations aller dans le fichier d'implémentation et de toutes les classes nécessaires sont déclarées dans le .h fichiers.
J'ai une réponse: Vous devez vérifier votre "#import " ordre. Avant d'utiliser la super-classe, il doit être importée et compilé.
J'ai eu un problème où j'ai été à l'aide de catégories dans une super-classe de la méthode et a été l'obtention de cet héritage d'erreur. Une fois que j'ai déplacé les catégories .h importations à la super-classe .m fichier de chose a commencé à aller mieux.
Viens de réaliser tous les possibles en-têtes de .h à .m fichier de la super-classe et de voir laquelle est la question du problème. Je suis sûr que c'est l'un des en-têtes utilisés dans les deux classes.
Comme @Igor dit, l'ordre des importations questions:
J'ai dû changer
à