2010-04-29 4 views
21

J'ai vécu quelque chose aujourd'hui pendant que je construis mon application. J'ai déclaré un protocole dans mon objet MyObject1 et ajouté une propriété delegate. J'ai assigné MyObject2 en tant que délégué de MyObject1. Je l'ai ajouté de cette manière, comme d'habitudeImpossible de trouver la déclaration de protocole dans Xcode

@interface MyObject2 : UIViewController <DelegateOfObject1>

Mais le Xcode dit que ma déclaration de protocole ne peut être trouvé. J'ai vérifié mon code mais j'ai déclaré ce protocole. J'ai essayé d'assigner MyObject2 en tant que délégué d'un autre objet. J'ai modifier mon code comme ceci

@interface MyObject2 : UIViewController <UITableViewDelegate,DelegateOfObject1>

mais Xcode répète qu'il ne peut pas trouvé déclaration de protocole de DelegateOfObject1. J'ai essayé de supprimer le DelegateOfObject1 sur mon code et ajouter assigner MyObject en tant que délégué d'un autre objet et il va comme ceci.

@interface MyObject2 : UIViewController <UITableViewDelegate,UITabBarDelegate>

Aucune erreur n'a été trouvé. Ensuite, je l'ai essayé à nouveau d'ajouter à nouveau mon DelegateOfObject1 dans le code

@interface MyObject2 : UIViewController <UITableViewDelegate,UITabBarDelegate,DelegateOfObject1>

A cette époque, Xcode n'a pas trouvé une erreur sur mon code. J'ai donc encore essayé d'enlever les UITableViewDelegate et UITabBarDelegate sur mon code.

@interface MyObject2 : UIViewController <DelegateOfObject1>

A cette époque, aucune erreur avait trouvé mais était le même code que j'ai écrire avant. Quelle devrait probablement être la cause de ce truc sur mon code?

... Merci

+0

'@protocol DelegateOfObject1 @optional - (void) someThingHappensAt: (NSString *) onWhatStuff; @ end' – edie

+0

FWIW J'ai eu exactement cette erreur, mais elle a été causée par une copie d'une ancienne version d'un framework dans l'un des dossiers spécifiés dans les chemins de recherche du framework. L'ancienne version ne contenait pas le protocole en question, mais le dossier contenant était le premier dans l'ordre du chemin de recherche. La suppression de l'infrastructure dupliquée a résolu l'erreur. – StephenT

+0

S'il vous plaît vérifier cette solution http://stackoverflow.com/questions/6447573/cannot-find-protocol-declaration –

Répondre

11

J'ai mis ma déclaration de protocole sur fichier séparé et de l'importer sur MyObject2

+0

Plus de détails pour résoudre le problème? – vgonisanz

+0

Coupe ta définition @protocol de la classe. Créez un nouveau fichier d'en-tête (Fichier> Nouveau> Fichier ...> Fichier d'en-tête), collez la définition @protocol puis importez le fichier d'en-tête –

1

Êtes-vous en train de faire un

#import "NameOfDelegate.h" 

Au sommet de votre tête MyObject?

+0

J'ai ajouté le neccesarry.h fichier – edie

57

L'erreur est due à la boucle d'importation.

+2

+ 1, pour la bonne réponse. :) – mAc

+0

Salut, ça me causait un mal de tête! –

+12

-1, Aucune explication. Expliquer ce qu'est une boucle d'importation, comment la réparer. –

4

L'erreur doit être dans la boucle d'importation.

Je devais importer "AppDelegate.h" dans les deux classes. Je l'ai supprimé de la classe qui a déclaré le protocole et l'erreur avait disparu. :)

0

Utilisez '@class MyObject;' afin d'éviter la boucle d'importation.

Questions connexes