2011-08-28 1 views
9

Il mio programma stava funzionando bene, ma ho cambiato qualcosa e ora ha oltre 48 errori.Errori durante l'importazione di riferimenti circolari

Penso di conoscere il problema, ma non so come risolverlo. Ho creato una classe chiamata mViewBase per tutti i miei UIViewController da cui derivare.

Ho deciso di disporre di una barra di navigazione nella parte inferiore di tutte le mie viste, per passare ad altri controller di vista denominati cakes2. So cakes2.h importa mViewBase e mViewBase torte import2.h

Devi essere in grado di farlo in Objective-C. Qualcuno ha idea di cosa posso fare?

file di mio mViewBase.h:

#import <UIKit/UIKit.h> 
#import "Cakes2.h" 

@interface mViewBase : UIViewController { 
    UIView *mBackground; 
    UIView *mBackArrow; 
    UITextView *mTitle; 
    // Cakes2 *mCakes; 
} 

-(void) aSetTitle: (NSString *) NewTitle; 
-(IBAction) aBack: (id) tender; 
-(IBAction) aHome: (id) sender; 
-(IBAction) aCakes: (id) sender; 
-(IBAction) aCall: (id) sender; 
-(IBAction) aDirections: (id) sender; 
@end 

Il mio file Cakes2.h:

#import <UIKit/UIKit.h> 
#import "Gallery.h" 
#import "WebView.h" 
#import "mViewBase.h" // Circular reference! But I need it 

@interface Cakes2 : mViewBase <UITableViewDelegate, UITableViewDataSource> { 
    // Gallery *mGallery; 
    IBOutlet UITableView *mMenu; 
    // WebView *mWebView; 
} 
-(IBAction) aOpenWeb; 
@end 
+0

simile: http://stackoverflow.com/questions/1619075/possible-circular-reference-problem –

+0

sei sicuro che sia questo il problema? Secondo alcuni spunti in giro ho appena fatto "la direttiva #import assicura che i file vengano importati (inclusi) solo una volta per compilazione" nell'obiettivo-c. – Dogmatixed

risposta

19

È possibile utilizzare una dichiarazione di inoltro in uno dei file di intestazione per evitare la necessità di importare l'altra intestazione. Per esempio, in mViewBase.h, si può dire:

@class Cakes2; 

Ora il compilatore sa che "Cakes2" si riferisce a una classe, e non è necessario importare l'intero file Cakes2.h.

+0

Prova e includi il minor numero possibile di file in.h, preferisci le dichiarazioni forward @class. Un file di intestazione è progettato per esporre l'interfaccia pubblica della classe. – zaph

+5

Ciao questo ha fatto il trucco ho messo la @class nel file di intestazione e l'importazione nel file m :) Grazie, Ted –

0

penso che si dovrebbe forse considerare l'utilizzo di un UITabBarController. È realizzato appositamente per gestire diversi controller di visualizzazione da una barra nella parte inferiore dello schermo.

+0

Ciao grazie per il tuo commento, ci stavo pensando, ma il mio progetto è quasi finito e non volevo strappare il codice. –