2011-07-30 3 views
0

J'ai essayé de rechercher ce problème, mais je n'arrive pas à trouver ce que je fais de mal.Objectif C Propriétés

Voici mon en-tête du contrôleur:

#import <UIKit/UIKit.h> 

@interface BabyLearnViewController : UIViewController { 
    UIButton *btnImage; 
    MediaManager* myMediaManager; 
} 
@property (nonatomic, retain) IBOutlet UIButton *btnImage; 
@property (retain) MediaManager* myMediaManager; 

- (IBAction)setNewImage; 

@end 

Voici ma classe de contrôleur:

#import "BabyLearnViewController.h" 
#import "MediaManager.h"; 

@implementation BabyLearnViewController 

@synthesize btnImage; 
@synthesize myMediaManager; 

Je sujette aux erreurs:

error: expected specifier-qualifier-list before 'MediaManager' 
error: no declaration of property 'myMediaManager' found in the interface 

Toutes les idées? Habituellement, la première erreur se produit si vous avez une référence cyclique. 'MediaManager' ne fait référence à rien d'autre. Des idées?

Répondre

8

Puisque vous n'avez aucune mention de la classe MediaManager au moment où il est utilisé dans le fichier d'en-tête, le compilateur ne peut pas comprendre ce qu'est "MediaManager" et émet une erreur. Déclarer que la classe en utilisant la déclaration en avant dans votre fichier d'en-tête pour laisser le compilateur savoir que MediaManager est en fait une classe:

@class MediaManager; 
@interface BabyLearnViewController : UIViewController { 
    ... 

post-scriptum Vous pouvez également importer MediaManager.h dans votre en-tête, mais utiliser la déclaration forward est préférable.

+1

Pourquoi l'utilisation d'une déclaration forward est-elle préférable? –

+0

@Rudy, avec une déclaration directe, vous ne rencontrerez pas de dépendances circulaires entre les en-têtes + moins d'en-têtes, ce qui peut améliorer le temps de compilation. – Vladimir

+0

Ok, compris, merci. –

2

Lieu #import "MediaManager.h" ce dans le fichier d'en-tête de BabyLearnViewController

1

essayer d'ajouter @class MediaManager; before @interface