27

2つのオブジェクトがあり、どちらもビューコントローラーです。最初の(これをviewController1と呼びます)はプロトコルを宣言します。2番目(当然のことながらviewController2と名付けます)はこのプロトコルに準拠しています。

XCodeは私に次のビルドエラーを与えています:'viewController1のプロトコル宣言が見つかりません'

私はこのテーマについてさまざまな質問を見てきましたが、それはループエラーに関係していると確信していますが、私の場合はそれを見ることができません...

以下のコード。

viewController1.h

@protocol viewController1Delegate;

#import "viewController2.h"

@interface viewController1 {

}

@end

@protocol viewController1Delegate <NSObject>

// Some methods

@end

viewController2.h

#import "viewController1.h"

@interface viewController2 <viewController1Delegate> {

}

@end

最初は、viewController1のインポート行がプロトコル宣言のインポート行より上にありました。これは、プロジェクトの構築をまったく妨げていました。SOを検索した後、問題に気づき、2行を入れ替えました。(エラーではなく)警告が表示されます。プロジェクトは正常にビルドされ、実際には完全に実行されます。しかし、私はまだ警告を与えられるために何かが間違っているに違いないと感じています。

さて、私が見る限り、コンパイラがviewController1.hに到達すると、最初に表示されるのはプロトコルの宣言です。次に、viewController.hファイルをインポートし、これがこのプロトコルを実装していることを確認します。

逆にコンパイルする場合は、最初にviewController2.hを調べ、最初に行うのは、最初の行がプロトコル宣言であるviewController1.hをインポートすることです。

私は何かが足りないのですか?

4

3 に答える 3

68

viewController1.hこの行を:から削除します

#import "viewController2.h"

問題は、viewController2のインターフェースがプロトコル宣言の前に前処理されることです。

ファイルの一般的な構造は次のようになります。

@protocol viewController1Delegate;
@class viewController2;

@interface viewController1
@end

@protocol viewController1Delegate <NSObject>
@end
于 2012-04-15T09:36:01.080 に答える
1
    A.h:
    #import "B.h"  // A

    @class A;

    @protocol Delegate_A 
       (method....)
    @end

    @interface ViewController : A
    @property(nonatomic,strong)id<ViewControllerDelegate> preViewController_B;(protocol A)
    @end


    B.h:
    #import "A.h"  // A

    @class B;

    @protocol Delegate_B 
       (method....)
    @end

    @interface ViewController : B
    @property(nonatomic,strong)id<ViewControllerDelegate> preViewController_A;(protocol B)
    @end

    A.m:
    @interface A ()<preViewController_B>
    @end

    @implementation A
    (implement protocol....)
    end


    B.m:
    @interface B ()<preViewController_A>
    @end

    @implementation B
    (implement protocol....)
   @end
于 2016-07-15T03:05:48.133 に答える
1

それを必要とするかもしれない人のために:

ViewController1.hのインポートをヘッダーファイル(.h)ではなくViewController2の実装ファイル(.m)に移動することで、これを修正することもできます。

そのようです:

ViewController1.h

#import ViewController2.h

@interface ViewController1 : UIViewController <ViewController2Delegate>
@end

ViewController2.h

@protocol ViewController2Delegate;

@interface ViewController2
@end

ViewController2.m

#import ViewController2.h
#import ViewController1.h

@implementation ViewController2
@end

これにより、プロトコル宣言の前にViewController1.hがViewController2.hにインポートされたためにエラーが発生する場合が修正されます。

于 2017-06-27T16:17:44.947 に答える