クラスへのアクセスを与えないimportディレクティブ

私はこのようなファイルを含んでいます:

#import "BannerPhoneContentController.h"

しかし、私はこのように使用しようとすると:

bannerContentController = [[BannerPhoneContentController alloc] init];

私はエラーが表示されます:

Use of undeclared identifier 'BannerPhoneContentController';

一見、私のインポートを無視するコードを引き起こす可能性がありますか?

これはバナーコンテンツコントローラのヘッダーです。

#import 
#import 

#import "BannerContentController.h"

@interface BannerPhoneContentController : BannerContentController 
{   
    UIScrollView *scrollView;
    UIPageControl *pageControl;
    NSMutableArray *viewControllers;

   //To be used when scrolls originate from the UIPageControl
    BOOL pageControlUsed;
}

@property (nonatomic, retain) UIScrollView *scrollView;
@property (nonatomic, retain) UIPageControl *pageControl;

@property (nonatomic, retain) NSMutableArray *viewControllers;

- (IBAction)changePage:(id)sender;

@end

EDIT bannerContentController is of type BannerContentController NOT BannerPhoneContentController. The latter is a subtype of the former. It is definitely worth noting that this exact code works just fine in another app, so it's nothing to do with the code itself - just how it's being included apparently. I'm stumped.

EDIT ok found the problem - not sure how to fix it. I generated the preprocessed file and the header file it's included is in fact this:

#import 
#import 

#import "ContentController.h"

@interface PhoneContentController : ContentController 
{   
    UIScrollView *scrollView;
    UIPageControl *pageControl;
    NSMutableArray *viewControllers;

   //To be used when scrolls originate from the UIPageControl
    BOOL pageControlUsed;
}

@property (nonatomic, retain) UIScrollView *scrollView;
@property (nonatomic, retain) UIPageControl *pageControl;

@property (nonatomic, retain) NSMutableArray *viewControllers;

- (IBAction)changePage:(id)sender;

@end

その差異に注意してください - すべてのバナーがありません。これは、ファイルのように見えるものです。しかし、私はチェックして、プロジェクトにあるファイルが私がトップに投稿したものであることを確認しました。私は解決策と建物の清掃を再試行しました。どうすればこの問題を解決できますか?なぜ起こったのですか?

EDIT The file that I'm including all this in is part of a code library. I have now created a new project, imported the code library and included all of this in that library once again in exactly the same way. and it works. I have looked over the two projects and the code in question is identical. This must be a project setting?

2

3 答え

再帰的なインポートのように私を探します。 BannerContentController.h BannerPhoneContentController.h をインポートし、 BannerPhoneContentController.h BannerContentController.h をインポートします。

そのような場合は、再帰的な依存関係を解決する必要があります。例えば。前方宣言を使用します。

1
追加された
実際には、.hでBannerContentControllerを宣言し、.mでBannerPhoneContentControllerをインポートしました。また、これは動作する別のアプリにあるのと同じ構造です。
追加された 著者 SirYakalot,
BannerPhoneContentControllerを宣言すると、セマンティック問題:互換性のない型 'BannerPhoneContentController *'から 'BannerContentController *'に割り当てられますが、BannerPhoneContentControllerがBannerContentControllerから直接継承するとどうなりますか?
追加された 著者 SirYakalot,
製品メニューは何ですか?ありがとう。
追加された 著者 SirYakalot,
非常に役立ちます!ありがとう。 OK ...そう、奇妙な。それを含むファイルは古い名前の古いバージョンです(すべてが 'バナー'を除いて同じです)。実際のファイルをチェックしてください。新しいファイルなので、これを修正する方法はありますか?
追加された 著者 SirYakalot,
残念ながら、それは巨大なプロジェクトの一部です。私はもう一つの編集を加えました。
追加された 著者 SirYakalot,
新しいxcodeを使用している場合は、前処理されたファイル(「製品」メニュー項目iirc)を調べることができます。
追加された 著者 Yuras,
製品 - >出力を生成する - >前処理されたファイル
追加された 著者 Yuras,
何かが完全に間違っているように見えます。問題を再現する最小限の完全な例を投稿できますか?
追加された 著者 Yuras,

私は前処理されたコードを生成し、コードの古いバージョンが含まれていたということを認識しました。

より有用なのはWHYです。インクリメンタルリンクがオンになっているときに発生するXcodeのバグです。基本的には、コードの対応するビットが変更されたときに前処理されたファイルの部分を変更するだけで時間が節約されます。残念ながら、これは常に正常に動作しません。

解決策は、ファイルを削除するか、ビルドをクリーンにするか、派生データを削除するか(ウィンドウ/ oraniser/projects /プロジェクト名/派生データを削除する)、xcodeを再起動する(コンピュータを再起動するか、新しいものを購入してから)ファイルを再インポートします。

XCodeは本当の痛みになることができます...

0
追加された

.hと #import "BannerPhoneContentController.h" @class BannerPhoneContentController を使用しても同じ結果が得られますか?

0
追加された
受信した 'BannerPhoneContentController'はフォワードクラスであり、対応する@interfaceは存在しない可能性があります
追加された 著者 SirYakalot,
私は - セマンティクスの問題: 'BannerContentController *'に互換性のない型 'BannerPhoneContentController *'から割り当てていますが、BannerPhoneContentControllerがBannerContentControllerから直接継承するとどうなりますか?
追加された 著者 SirYakalot,
私はそれをすることができましたが、私がしたいことではありません。このコードは別のアプリでも動作しますので、どこに置いているのかはわかります。
追加された 著者 SirYakalot,
なぜ私は実装でそれを使用している場合、ヘッダーのクラスを宣言する必要がありますか?
追加された 著者 SirYakalot,
.hファイルの #import @class の両方を使用することで、これまでの受信機の警告に役立ちました。それはあなたの場合に役立ちますか?
追加された 著者 iNoob,
@SirYakalot、あなたの編集では、 bannerContentControllerはBannerContentControllerではないBannerPhoneContentControllerです。 alloc bannerContentController = [[BannerContentController alloc] init]
追加された 著者 iNoob,
#import BannerPhoneContentController があり、 @class BannerPhoneContentController 以外に alloc というコードがあります。/code>、 BannerContentController を入力してください。
追加された 著者 iNoob,