45

内部オブジェクトによって実装が提供されるいくつかのメソッドを公開するクラスがあります。

実行時に内部オブジェクトへのメソッド呼び出しをディスパッチするために前方呼び出しを使用していますが、宣言されたメソッドの実装が見つからないため、XCode は不平を言っています。

SOで他にも同様の質問がいくつか見つかりましたが、それらはすべて設計変更で解決されました。

ここで設計について議論するつもりはありませんが、何か提案があれば、そのような議論に適したコード レビューに関する未解決の質問があります。

Incomplete Implementation私の質問は、XCode で警告をオフにする方法が存在するかどうかです。

4

2 に答える 2

78

Incomplete Implementation追加することで警告を抑制することができます

  #pragma clang diagnostic ignored "-Wincomplete-implementation"

のすぐ上@implementation

お役に立てれば

編集

コメントで、これは誰かにとってはうまくいかなかったと言われ、その理由を見つけたのは、彼らが受け取っていた別の警告だったからです。私は少し遊んで、そこで問題を解決できたので、私はこの回答を更新して、彼らの回答とGCC無視する回答も含めます。したがって@Tony、次の問題は機能するはずです

  #pragma clang diagnostic ignored "-Wprotocol"

GCCコンパイラのバージョンを知りたい人は

  #pragma GCC diagnostic ignored "-Wprotocol"

  #pragma GCC diagnostic ignored "-Wincomplete-implementation"

また、必要なコンパイラフラグを追加するだけで、コンパイラフラグに移動して追加することによりdiagnotstic ignores、ファイルごとに設定を指定することによって、これらすべてを実行できることも指摘します。XCODE Project >> Target >> Build Phases >> Compile Sources-WprotocolWincomplete-implementation

この更新が必要な場合は、回答を更新して含めるようにします。

編集2

私はこれについてもう少し掘り下げていて、Clang Compliler User's Manualに出くわしたので、これはまだこの分野で問題を抱えている人にとって興味深く、役立つと思いました.

#pragma diagnostic ignoresこれらを使用できる別の方法も見つけました。つまり、ファイルのすべてではなく特定のセクションを無視したい場合は、次のことができますpushpop

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wmultichar"

    // And pop the warning is gone.
    char b = 'fa';

    #pragma clang diagnostic pop

これらの#pragmaコンパイル無視はすべて一緒に使用できるGCCため、上記のようになることに注意してください。

    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wmultichar"

    // And pop the warning is gone.
    char b = 'fa';

    #pragma GCC diagnostic pop

pushとは、これまでに試したpopすべてのもので動作するようです。diagnostic ignores

もう一つは

    #pragma clang diagnostic ignored "UnresolvedMessage"
    #pragma GCC diagnostic ignored "UnresolvedMessage"

未使用の変数を抑制するものは

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wunused-variable"
        NSString *myUnusedVariable;
    #pragma clang diagnostic pop

そしてGCCバージョンは

    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wunused-variable"
        NSString *myUnusedVariable;
    #pragma GCC diagnostic pop

availableInDeploymentTarget からの警告を無視するための追加機能

    #pragma clang diagnostic push
    #pragma ide diagnostic ignored "UnavailableInDeploymentTarget"
        leftEdge.barTintColor = rightEdge.barTintColor = self.toolbar.barTintColor;
    #pragma clang diagnostic pop

および performSelector リーク

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
    [target performSelector:cancelAction withObject:origin];
    #pragma clang diagnostic pop

廃止された宣言

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wdeprecated-declarations"
        button = [[UIBarButtonItem alloc] initWithTitle:buttonTitle style:UIBarButtonItemStyleBordered target:self action:@selector(customButtonPressed:)];
    #pragma clang diagnostic pop

おかげさまで、ここでリスト全体DanSkeelを見つけることができます

于 2013-01-21T18:02:20.080 に答える
26

クラス カテゴリ インターフェイスでメソッドを宣言できます。

@interface MyClass (ForwardedMethods)

- (void)doSomething;

@end

(カテゴリの実装なし)。そうすれば、Xcode は「不完全な実装」について文句を言わなくなります。

于 2013-01-21T17:52:12.903 に答える