2011-08-28 4 views
9

私のプログラムは正常に動作していましたが、何か変更されましたが、今は48以上のエラーがあります。循環参照をインポートするときのエラー

私はこの問題を知っていると思いますが、それを修正する方法はわかりません。私はすべてUIViewControllerが派生するためにmViewBaseというクラスを作成しました。

私はすべてのビューの一番下にナビゲートバーを持って、cakes2という別のビューコントローラに行くことにしました。したがって、cakes2.hはmViewBasemViewBaseをインポートします。インポートcakes2.h

これはObjective-Cで実行できる必要があります。誰が私が何をすることができるか考えていますか?

マイ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 

マイ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

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

+0

あなたはそれが問題だと確信していますか?私は、 "#importディレクティブは、ファイルがコンパイルごとに1回だけインポート(インクルード)されることを確実にする"という目標を達成しました。 – Dogmatixed

答えて

19

ヘッダーファイルのいずれかで前方宣言を使用すると、別のヘッダーをインポートする必要がなくなります。例えば、mViewBase.hに、あなたが言うことができます。

@class Cakes2; 

を今コンパイラが「Cakes2」は、クラスを参照していることを知っている、とあなたは全体Cakes2.hファイルをインポートする必要はありません。

+0

可能な限り少数のファイルをインクルードしてください。@class forward宣言を優先します。ヘッダーファイルは、クラスのパブリックインターフェイスを公開するように設計されています。 – zaph

+5

こんにちは、このトリックは、@クラスをヘッダファイルに入れ、mファイルにインポートしました:)ありがとう、Ted –

0

私はあなたがおそらくUITabBarControllerを使用することを検討すべきだと思います。これは、画面の下部にあるバーから複数のビューコントローラを管理するために特別に作成されています。

+0

ご意見ありがとうございました、私はそれについて考えていましたが、私のプロジェクトはほぼ完了しており、コードを壊したくありませんでした。 –