いくつかのメソッドを公開するクラスがあり、その実装は内部オブジェクトによって提供されます。
実行時にメソッド呼び出しを内部オブジェクトにディスパッチするためにフォワード呼び出しを使用していますが、宣言されたメソッドの実装が見つからないため、XCodeは文句を言います。
SOで他にも同様の質問がいくつか見つかりましたが、それらはすべて設計変更で解決されました。
ここでデザインについて議論するつもりはありませんが、誰かがそれについて何か提案があれば、コードレビューに 未解決の質問 があります。これはそのような種類の議論により適しています。
私の質問は、XCodeでIncomplete Implementation
警告をオフにする方法が存在するかどうかです。
追加することで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
に移動してコンパイラフラグを追加することにより、ファイルごとに設定を指定することによっても実行できるため、-Wprotocol
またはWincomplete-implementation
、あるいは必要なコンパイラフラグを追加するだけです。
この更新がすべての助けになることを願っています。もう必要な場合は、回答を更新して含めます。
編集2
私はこれについてもう少し掘り下げていて、 Clang Complilerユーザーズマニュアル に出くわしたので、これはまだこの領域で問題を抱えている人にとっては興味深く、役立つだろうと思いました。
また、これらの#pragma diagnostic ignores
を使用できる別の方法を見つけました。つまり、Push
とpop
を使用できるため、ファイルのすべてではなく特定のセクションだけを無視したい場合は、あなたは次のことができます
#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
のおかげで、 ここにリスト全体 を見つけることができます
クラスカテゴリインターフェイスでメソッドを宣言できます。
@interface MyClass (ForwardedMethods)
- (void)doSomething;
@end
(カテゴリの実装なし)。そうすれば、Xcodeは「不完全な実装」について文句を言うことはもうありません。