1. ホーム
  2. objective-c

[解決済み] 未宣言のセレクタ」の警告を消す方法

2022-04-23 06:41:08

質問

NSObjectインスタンスにセレクタを使用したい。 なし 実装されたプロトコルは必要ありません。例えば、呼び出されたNSObjectインスタンスがそれをサポートしていれば、エラープロパティを設定しなければならないカテゴリーメソッドがあります。これがそのコードで、コードは意図したとおりに動作します。

if ([self respondsToSelector:@selector(setError:)])
{
    [self performSelector:@selector(setError:) withObject:[NSError errorWithDomain:@"SomeDomain" code:1 userInfo:nil]];
}

しかし、コンパイラは setError: シグネチャを持つメソッドを見つけられず、警告を表示します。 @selector(setError:) というスニペットがあります。

Undeclared selector 'setError:'

この警告を消すためにプロトコルを宣言する必要はありません。なぜなら、これを使う可能性のあるすべてのクラスが何か特別な実装をする必要はないからです。というのも、これを使う可能性のあるすべてのクラスに特別な実装をさせたくないからです。ただ、慣習として setError: メソッドまたはプロパティを使用します。

これは可能なのでしょうか?どうやって?

乾杯

EP

解決方法は?

で警告を無効化する方法もあります。

#pragma GCC diagnostic ignored "-Wundeclared-selector"

この行は、警告が発生した.mファイル内に配置することができます。

更新してください。

LLVMでもこのように動作します。

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"

... your code here ...

#pragma clang diagnostic pop