まず、子クラスが次のように定義されていると仮定します。
@interface Gfx : NSObject
(は質問では省略されています。また、 と の両方とNSObjectも呼ばれます) つまり、「子」は「親」のサブクラスではありません。GfxmyChildClass
メソッドの宣言を与えていないので、次のGfx initように推測します。
- (id) init:(id)parent
現在、プロパティにアクセスするための「ドット」構文は、参照オブジェクトの実際の型ではなく、オブジェクト参照を保持する変数の静的型に依存しています。あなたが持っている場合:
id parent; // instance variable
と
parent.myObject
その場合、コンパイラはidプロパティを持たないため、反対しますmyObject。2 つのソリューション:
(a) setter/getter メソッドを直接呼び出します。例:
[parent myObject]; // get the value of the property
[parent setMyObject:e]; // set the value of the property to e
これは、コンパイラがid特別に処理し、呼び出しに対して静的な型チェックを実行しないため機能します。メソッドは実行時にのみ動的に検出されます。ただし、これによっても問題が発生します。参照されるオブジェクトに/メソッドparentがない場合はどうなるでしょうか。実行時にエラーが発生します。myObjectsetMyObject
parent(b)正しく入力またはキャストする。タイプするには、インスタンス変数とinit宣言を useAppDelegateに変更します。たとえば、次のようになります。
- (id) init:(AppDelegate *)parent
これにより、静的 (コンパイル時) 型チェックとドット表記が得られます。キャストを使用して、そのまま使用することもparentできidます。
((AppDelegate *)parent).myObject; // compiler will be happy
ただし、これはオブジェクトを参照しているparent かAppDelegateどうかをチェックしません。キャストは、コンパイラへの「信頼してください」命令です。そのため、キャストを使用すると静的型チェックがバイパスされますが、ランタイム チェックは引き続き実行されます。
HTH