2013-03-04 6 views
5

Ho riscontrato un errore semantico di build in XCode quando provo a creare il mio progetto. Ho 3 setup di classi NSOperation per scaricare informazioni da internet, elaborarle e inviarle al controller di visualizzazione genitore, un'istanza di ViewController. Ecco il codice per una classe operaia:Nome del tipo di ViewController non riconosciuto in una classe, ma in un'altra?

#import <Foundation/Foundation.h> 
#import "ViewController.h" 

@interface ImageGetter : NSOperation 

@property (nonatomic) int sid; 
@property (nonatomic, retain) ViewController* pvc; 

@end 

Qui è il codice per quello che non è di lavoro:

#import <Foundation/Foundation.h> 
#import "ViewController.h" 

@interface CurrentGetter : NSOperation 

@property (nonatomic) int sid; 
@property (nonatomic, retain) ViewController* pvc; 

@end 

Errore:

ERROR: Unknown type name 'ViewController'; did you mean 'UIViewController'? 

Perché mi questo errore? Ho importato ViewController.h in entrambi i file e solo uno funziona.

ViewController.h:

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVFoundation.h> 
#import <MediaPlayer/MediaPlayer.h> 

#import "DataGetter.h" 
#import "CurrentGetter.h" 
#import "AppDelegate.h" 

@interface ViewController : UIViewController <UITabBarDelegate> 
{ 
    NSTimer* tmr; 
} 

@property (nonatomic) float max; 
@property (nonatomic, retain) NSDictionary* plist; 
@property (nonatomic, retain) NSArray* processingobj; 

@property (nonatomic, retain) AVAudioPlayer* intro; 
@property (nonatomic, retain) AVAudioPlayer* woop; 

@property (nonatomic) float dataDone; 
@property (nonatomic) BOOL introDone; 
@property (nonatomic) BOOL currentDone; 

@property (nonatomic) int newSid; 
@property (nonatomic) int newPart; 

@property (nonatomic, retain) NSMutableArray* views; 

@property (nonatomic) int audioTab; 
@property (nonatomic) int currentSid; 
@property (nonatomic) BOOL isPlaying; 

@property (nonatomic, retain) UIScrollView* partTab; 
@property (nonatomic, retain) NSMutableArray* nowPlayingObj; 
@property (nonatomic, retain) UINavigationBar* audioNav; 

@property (nonatomic, retain) MPMoviePlayerController* player; 
@property (nonatomic, retain) UILabel* elapsed; 
@property (nonatomic, retain) UILabel* remaining; 
@property (nonatomic, retain) UISlider* slider; 
@property (nonatomic) BOOL sliderEditing; 
@property (nonatomic, retain) UIButton* playBtn; 

@property (nonatomic, retain) UITabBar* tabBar; 

//Images 

@property (nonatomic, retain) UIImage* announcement; 
@property (nonatomic, retain) NSMutableArray* seriesBanners; 
@property (nonatomic, retain) UIProgressView* prog; 

- (void)plistDone; 

@end 
+0

Il file .m è stato aggiunto alla destinazione? –

+0

Mostra il contenuto di ViewController.h –

+0

Hai provato Pulisci? –

risposta

12

Prova a fare una dichiarazione anticipata della classe nel file di intestazione CurrentGetter, in questo modo:

@class ViewController; 
@interface CurrentGetter : NSOperation 

Questo dice al compilatore che esiste una classe denominata " ViewController." Quando ci sono delle dipendenze circolari, come quando due classi hanno istanze l'una dell'altra, l'uso delle dichiarazioni in avanti delle classi risolve la confusione che ne risulta.

+0

Bene, la costruzione è riuscita con quella linea. Puoi spiegare perché ha funzionato? – David

+0

Sì, mi dispiace. Sono un po 'nuovo nel sito, quindi ho dimenticato che è stata considerata una buona forma includere le spiegazioni. La mia breve spiegazione ha senso? – ewrobinson

+0

Quindi, perché la classe ImageGetter è stata creata correttamente quando non veniva eseguito il CurrentGetter, anche se hanno lo stesso identico codice? – David