2013-03-04 10 views
5

Ich bekomme einen Build-semantischen Fehler in XCode, wenn ich versuche, mein Projekt zu erstellen. Ich habe 3 NSOperation Klassen eingerichtet, um Informationen aus dem Internet herunterzuladen, zu verarbeiten und an den übergeordneten View-Controller zu senden, eine Instanz von ViewController. Hier ist der Code für eine Arbeiterklasse:ViewController-Typ Name nicht in einer Klasse erkannt, aber es ist in einem anderen?

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

@interface ImageGetter : NSOperation 

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

@end 

Hier ist der Code für die, die nicht Arbeits ist:

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

@interface CurrentGetter : NSOperation 

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

@end 

Fehler:

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

Warum erhalte ich dieser Fehler? Ich habe ViewController.h in beide Dateien importiert und nur eine funktioniert.

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

Ist die .m-Datei zu Ihrem Ziel hinzugefügt? –

+0

Zeigen Sie den Inhalt von ViewController.h –

+0

Haben Sie versucht, sauber? –

Antwort

12

Versuchen Sie in Ihrer CurrentGetter Header-Datei, wie dies eine Vorwärts-Deklaration der Klasse zu tun:

@class ViewController; 
@interface CurrentGetter : NSOperation 

Dies teilt den Compiler, dass es eine Klasse existiert namens " ViewController. " Wenn es zirkuläre Abhängigkeiten gibt, wie wenn zwei Klassen Instanzen voneinander haben, löst die Verwendung von Vorwärtsdeklarationen der Klassen die Verwirrung, die sich ergibt.

+0

Nun, der Build ist mit dieser Linie gelungen. Kannst du erklären, warum das funktioniert hat? – David

+0

Ja, tut mir leid. Ich bin ein bisschen neu auf der Seite, also habe ich vergessen, dass es eine gute Form war, Erklärungen einzubauen. Macht meine kurze Erklärung Sinn? – ewrobinson

+0

Warum also hat die ImageGetter-Klasse richtig gebaut, wenn der CurrentGetter nicht funktioniert, obwohl sie genau den gleichen Code haben? – David