タイプIDのオブジェクトでメソッドを呼び出そうとすると、メソッドが見つかりませんでした。もちろんではありませんが、idオブジェクトの感覚ではありませんか?タイプidのオブジェクトに対してメソッドを呼び出すとき
ですが、コンパイラに伝えるへの道:
「あなたは今、オブジェクトのクラスがどの私は、このメソッドを呼び出していませんが、心配しないで、それはそれを実装しない私は確信しています! "?
タイプIDのオブジェクトでメソッドを呼び出そうとすると、メソッドが見つかりませんでした。もちろんではありませんが、idオブジェクトの感覚ではありませんか?タイプidのオブジェクトに対してメソッドを呼び出すとき
ですが、コンパイラに伝えるへの道:
「あなたは今、オブジェクトのクラスがどの私は、このメソッドを呼び出していませんが、心配しないで、それはそれを実装しない私は確信しています! "?
メソッドを呼び出しますか?
そして、あなたがオブジェクト型id
を持っている場合、それは同様respondsToSelector
を使用するために、おそらく良いアイデアです:)
すなわち
if ([myObject respondsToSelector:@selector(dosomething:)])
myObject performSelector:@selector(doSomething:) withObject:@"hello"];
id
オブジェクトは、それがわかっているクラスにキャストできます。
あなたはinstanceA
という名前id
インスタンスを持っていて、それがClassA
であることがわかっている場合は、それに応じて
Class A *instanceACasted = (ClassA *)instanceA;
それを唱えるその後、あなたはperformSelector
を使用することができ
[instanceACasted methodCall];
はい、ちょうど適切なクラス型の変数を使用します。メッセージを送信するときに明示的なキャストを実行するか、正しいタイプの変数に割り当てることができます。
id myId = ...;
// Option 1: Use a cast when sending the message
[(MyClass *)myId someClassMethod];
// Option 2: Assign to a variable
MyClass *myObj = miId; // Implicit cast in the assignment
[myObj someClassMethod];
ありがとう、やっと私は暗黙のキャスティングは何ですか:) – bijan
メソッドがオブジェクト型の0〜2引数を取る場合にのみ機能します。メソッドが2つ以上の引数を取る場合、またはいずれかの引数がプリミティブ型である場合、それは機能しません。 –
Fine、NSInvocationを見てください;) – deanWombourne
これは私の状況(1引数、多くの潜在的な受信機の種類)に行く方法だと思います! – bijan