2016-03-30 8 views
2

私のアプリケーションでは、複数のクラスがあり、それぞれのクロスオーバーはそれぞれ です。私はこのクラスを接続し、それらのプロパティを作成する必要がありますが、いくつかのクラスは別のクラスでは見えません。ここでの主な問題はヘッダファイルを含めることです。 クラスMyOperationQueueヘッダーファイルを含める際の問題

#import <Foundation/Foundation.h> 
#import "ContentTableView.h" 
//#import "CustomTableViewCell.h" 
//#import "ObjectForTableCell.h" 

@interface MyOperationQueue : NSOperation 

@property(assign, nonatomic) BOOL isCancelled; 
@property(strong, nonatomic) ContentTableView* tableView; //unknown type name 

クラスObjectForTableCell

#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 
#import "MyOperationQueue.h" 

@interface ObjectForTableCell : NSObject 

@property (strong, nonatomic) MyOperationQueue* currentQueue;//unknown type name 

クラスContentTableView - ここで私は警告を私は助けを事前

#import <UIKit/UIKit.h> 
#import "CustomTableViewCell.h" 
#import "Protocol.h" 
#import "MyOperationQueue.h" 
#import "ObjectForTableCell.h" 
#import "ImageViewController.h" 

@interface ContentTableView : UITableViewController<CellDelegate, NSURLSessionDataDelegate, NSURLSessionDelegate, NSURLSessionTaskDelegate> 

感謝を持っていません。

答えて

5

スティック@class MyOperationQueue;

@interface ObjectForTableCell : NSObject 

の上にそれを作るために:ここでは
@class MyOperationQueue; 

@interface ObjectForTableCell : NSObject 

は、公式ドキュメント hereからの抜粋です。他のクラスを参照する

インターフェイスファイルがクラスを宣言し、そのスーパークラスをインポートすることにより、 は暗黙的にすべての継承クラスの宣言を含みます。 NSObjectからそのスーパークラスまでです。インターフェイスは、この階層で クラスでないと指摘されている場合は、それが明示的にインポートするか @classディレクティブでそれらを宣言する必要があります。

@class Rectangle, Circle; 

このディレクティブは、単に「長方形」と「サークル」は、クラスであることを コンパイラに通知します名前。 はインターフェイスファイルをインポートしません。インタフェースファイルには、インスタンス変数、戻り値、および 引数を静的に入力するときに、クラス名 が記述されています。たとえば、この宣言ではNSColorクラスが記述されています。

単純型としてクラス名を使用して は、任意のクラスインターフェイスの詳細(その方法と インスタンス変数)に依存しない、このような宣言は、@classディレクティブは、コンパイラ 十分な事前警告を与えますので、どのような期待する。ただし、クラスへのインターフェイス が実際に使用されている(インスタンスが作成され、送信されたメッセージ)場合は、 クラスインターフェイスをインポートする必要があります。通常、インターフェイスファイルは @classを使用してクラスを宣言し、対応する実装ファイル はインターフェイスをインポートします( のインスタンスを作成するか、メッセージを送信する必要があるため)。

@classディレクティブは、コンパイラ とリンカによって認識されるコードの量を最小限に抑えます。したがって、クラス名の宣言である を与えるのが最も簡単な方法です。シンプルであるため、他の ファイルをインポートするファイルのインポートに伴う可能性のある問題が発生する可能性はありません。たとえば、1つのクラスが静的に型指定されたインスタンス の別のクラスの変数を宣言し、その2つのインターフェイスファイルがそれぞれ をインポートすると、どちらのクラスも正しくコンパイルできません。

他のさまざまなコンパイラ指令hereにも優れた記事があります(NSHipsterによる)。私はこの知識を読んでおくことをお勧めします。

+0

大変ありがとう、私は以前のXcodeでそれに直面していませんでしたが、C++に直面していましたので、ありがとう、今はすべて完璧に動作します。 – Melany

+0

@Melany:問題ありません! :) –

1

は、時には物事は、あなたが円形の輸入を作成するとき、すなわちMyOperationQueue.hContentTableView.h輸入お互いをめちゃくちゃます。

共通の修正は、これらの輸入品のうち少なくとも一つを削除し、クラスの前方宣言とそれらを置き換える、すなわち@class ContentTableView;からMyOperationQueue.h追加することです。

次に、実装ファイルMyOperationQueue.mにContentTableView.hをインポートして、インターフェイス全体がわかるようにします。これは、通常、コンパイル時間を短縮するのにも役立ちます。

+0

説明ありがとうございます。 – Melany

+0

これがなぜ落とされたのか分かりません... – Eiko

+1

私はあなたの答えをアップしました。また、なぜ理解していません... – Melany

関連する問題