0

コンパイルエラーを抑制する方法はありますか?この場合、使用しようとしているクラスが外部ライブラリにあるため、プロトコルを使用できません。私はコードを制御できません

if (myClass && [[myClass class] respondsToSelector:@selector(getSomething)])
{
   // Compile error on the line below
   MyResult *result = [myClass getSomething];

   // Also tried
   MyResult *result = [(id)myClass getSomething];

}

編集: エラー:セレクターの既知のクラスメソッドがありません

4

2 に答える 2

1

型指定されていないObjective-Cオブジェクトでメソッドを使用すると、コンパイラは、戻り値に応じて異なるコードを生成する必要があるため、セレクタに基づいて呼び出しようとしているメソッドを推測しようとします。ARCを使用するかどうかによってコードの生成方法も異なり、それに応じてコンパイラを変更する必要があります。

ARCがない場合、コンパイラーは、戻りタイプがid  認識していないセレクターに対するものであると想定し、警告を生成します。ARCでは、コンパイラがメモリ管理の機会を利用したくないため、ハードエラーになります。

そのため、少なくとも、メソッドの既存の宣言についてコンパイラーに通知する必要があります。

于 2013-01-15T17:28:43.140 に答える
0

この記事では、#pragma宣言を使用して、警告が誤検知であることが確実な場合(または無視しても安全だと思われる場合)のコンパイラ警告を回避する方法について説明します。NSHipster-#pragma

于 2013-01-15T17:35:04.780 に答える