1

appDelegateによってmyClassがインスタンス化され、myClassによってnewClassがインスタンス化された別のクラスがあります。newClassインスタンスから、それを作成したmyClassインスタンスのプロパティにアクセスしたいと思います。私はこれを次のように行いました:

[[[UIApplication sharedApplication].delegate myClass] property]

これは機能します。実際にプロパティを取得できますが、Xcodeから次の警告が表示されます。

warning: "-myClass" not found in protocols
warning: no "-myClass" method found  
(messages without a matching signature will be assumed to return "id" and accept "..." as arguments)

newClassプロパティは、.hファイルと.mファイルで正しく宣言されており、プロパティが設定され、合成されています。

コンパイルして実行し、実際にプロパティの値を取得できます。

Xcodeの警告を無視する必要がありますか?

myClassインスタンスのプロパティにアクセスするためのより良い方法はありますか?

4

2 に答える 2

4

-[UIApplicationデリゲート]のドキュメントを参照してください。リターンタイプは次のとおりであることに注意してください。

id <UIApplicationDelegate>

したがって、返されるオブジェクトについて知っているのは、それがこのプロトコルに準拠しているということだけです。-myClassデリゲートがメッセージに応答し、コンパイラが喜んで作成するものではないと想定することは、信頼の飛躍にほかなりません。

あなたはそれを少しハックしてそのように働くことができます:

[[(MyAppDelegateClass *)[[UIApplication sharedApplication] delegate] myClass] property]

しかし、それは悪い習慣でしょう。代わりに、アプリケーションデリゲートをシングルトンにして、次のことができるようにすることをお勧めします。

[[[MyAppDelegateClass sharedApplicationDelegate] myClass] property]
于 2009-05-13T18:05:01.467 に答える
0

コンパイル時に、Xcodeはプロパティと通常のObjective-Cから飛躍することはできないと思います。プロパティが見つからないため、何をしているのかを知っていると想定し、空欄に記入します。実行時に物事は明らかに大丈夫です。

代わりにこれを試してください:

[[[[UIApplication sharedApplication] delegate] myClass] property];

ところで、このようなコードが自分のコード全体に散らばっていないので、私は通常、アプリデリゲートのヘッダーで#defineを実行します。

#define APPDELEGATE (myAppDelegate *)[[UIApplication sharedApplication] delegate]

それで、コードで私はただ行くことができます:

[[APPDELEGATE myClass] property];
于 2009-05-13T03:23:51.543 に答える