5

注: これはこの質問に似ていますが、同じではありません。約束します。

テーブルの内容を並べ替えるためにモーダル ビューを呼び出す一連のテーブル ビューがあります。これを行うために、1 つのテーブル ビュー コントローラーのヘッダー ファイルに単純なプロトコルを設定したところ、うまく機能しました。次に、このプロトコルを他のテーブル ビュー コントローラーにコピーしたところ、次の警告が表示されました。

「ModalViewDelegate」の重複するプロトコル定義は無視されます

これは単なる警告であることがわかりましたが、コンパイルするたびに表示されるのは避けたいと思います。警告を取り除くために、プロトコルが最初に定義されたヘッダー ファイルをインポートしました。繰り返しますが、私は完全に満足していませんでした。警告なしでプロトコルを使用できるようにするためだけに、すべてのテーブル ビューにヘッダー ファイルをインポートするのは、ずさんなようです。

ここまで読んでいただき、ありがとうございます。私の質問は、「なぜこれが起こっているのですか?同じプロトコルを使用しながら、この警告を取り除くより良い方法はありますか?」

4

2 に答える 2

7

同じプロトコルを使用しながら、この警告を取り除くより良い方法はありますか?

コンパイラは、プロトコルを参照できるようにするために、プロトコルについて知る必要があります。これを実現する方法は 2 つあります。プロトコルが宣言されているヘッダーを、それを使用しているファイルにインポートするか、それらのファイルでプロトコルの前方宣言を行います@protocol MyProtocol;。2 つ目は、(循環インポートを避けるために) プロトコルが相互に参照する必要がある場合にのみ役立ちます。クラスがプロトコルを採用する必要がある場合、プロトコル内のメソッドの宣言を確認する必要があります。つまり、プロトコル宣言自体、つまりヘッダーを確認する必要があります。

警告なしでプロトコルを使用できるようにするためだけに、すべてのテーブル ビューにヘッダー ファイルをインポートするのは、ずさんなようです。

これはずさんなことではなく、物事が機能する方法です。プロトコル宣言を独自のヘッダーに入れて、必要な場所にインポートするのは理にかなっているように思えます。

于 2012-04-03T21:08:08.890 に答える
2

@protocol がクラスのヘッダー内で定義されているという同様の警告を発見しました。そのプロトコルを独自の.hに分割し、それを別の場所にインポートすると修正されました。

于 2012-04-10T15:44:15.997 に答える