2011-08-28 14 views
9

Mi programa funcionaba bien, pero cambié algo y ahora tiene más de 48 errores.Errores al hacer importaciones de referencia circular

Creo que sé el problema, pero no sé cómo solucionarlo. Creé una clase llamada mViewBase para todos mis UIViewController s de la que se deriva.

Decidí tener una barra de navegación en la parte inferior de todas mis vistas, para ir a otros controladores de vista llamados cakes2. Por lo tanto, cakes2.h importa mViewBase y mViewBase import cakes2.h

Debe poder hacer esto en Objective-C. ¿Alguien tiene alguna idea de lo que puedo hacer?

archivo Mi 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 

Mi archivo 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

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

+0

¿estás seguro de que ese es el problema? De acuerdo con algunas preguntas que acabo de hacer, "la directiva #import garantiza que los archivos se importen (se incluyan) una sola vez por compilación" en Object-c. – Dogmatixed

Respuesta

19

Puede usar una declaración directa en uno de sus archivos de encabezado para evitar la necesidad de importar el otro encabezado. Por ejemplo, en mViewBase.h, se puede decir:

@class Cakes2; 

Ahora el compilador sabe que "Cakes2" se refiere a una clase, y que no es necesario importar todo el archivo Cakes2.h.

+0

Intente e incluya la menor cantidad de archivos posible en archivos .h, prefiera las declaraciones de @class forward. Un archivo de cabecera está diseñado para exponer la interfaz pública de la clase. – zaph

+5

Hola, este fue el truco. Puse el @class en el archivo de encabezado y la importación en el archivo m :) Gracias, Ted –

0

Creo que tal vez debería considerar el uso de un UITabBarController. Está hecho específicamente para administrar varios controladores de visualización desde una barra en la parte inferior de la pantalla.

+0

Hola gracias por tu comentario, estaba pensando en eso, pero mi proyecto está casi terminado y no quería romper el código. –

Cuestiones relacionadas