2009-08-27 13 views
3

私はアプリケーション代理人の変数/ properyをグローバルとして使用しています。 (私はシングルトンクラスを扱いたくありません)アプリケーション代理変数/プロパティにアクセスしようとしています

私は、アプリケーション代行クラスに#defineステートメントを書き込もうとしています。入力した場合:

[UIApplication sharedApplication] 

私のアプリケーションデリゲートクラスでは、コードヒントはsharedApplicationを認識しません。しかし、viewControllerクラスに同じものを入力すると、 "sharedApplication"がすぐにポップアップします。私applicationDelegate.hにNSMutableDictionaryを定義するために

、私が書く(または.M?):

#define MyDictionary [[[UIApplication sharedApplication] delegate] stateDictionary] 

その後、私は別のクラスでそれを使用しようとします

[[MyDictionary objectForKey:@"California"] largestCity]; 

MyDictionaryを最初に宣言する必要があるというエラーが表示されます。私は本当にここでたくさんのコンセプトについて混乱しています。

答えて

8

私は誰かがこれをよりよく答えることをかなり確信しているが、ここでは、迅速一つだ:

のは、アプリケーションがあるmyApplicationと呼ばれているとしましょう。 MyApplicationDelegateに「グローバル」プロパティを割り当て、それがどこにもこのようなからアクセスできます:

// get reference to app delegate 
MyApplicationDelegate *appDelegate = (MyApplicationDelegate *)[[UIApplication sharedApplication] delegate] 

Property *myProperty = appDelegate.property; 

また、あなたはヘッダにMyApplicationDelegateファイルにリンクしていることを確認します

#import "MyApplicationDelegate.h" 

長い議論があります「グローバル」オブジェクトを使用するのが一般的には良い設計ですが、今はそのようなことはしません。

+0

それは素晴らしいです。ありがとうございました。あなたの2つのステートメントを使わずに変数にアクセスできるように、それを定義するための方法はありますか?私はそれらを解放する必要がありますか?もし私がそれらをリリースしたら、それは辞書の私のAppDelegatesインスタンスを解放し、委譲しますか? – Bryan

+0

また、私の質問の最初の部分では、2つのappDelegatesの違いは何ですか? – Bryan

+0

残念ながら、これらの2行を使用する必要があります。私が知っている実際のグローバル変数はありませんが、私は自分のコードでそれらを使用しません。 :) リリース:作成したクラスでリリースします。たとえば、MyApplicationDelegateでそれらを作成した場合は、そこのdeallocメソッドで解放します。 App delegate question:新しいstackoverflowの質問を開始します。 :)それはそれ自身の話題です... – Rudi

2

私はいつもこのようUIApplicationにカテゴリを追加します。

@interface UIApplication (MyAppDelegate) 
+(MyAppDelegate*)sharedMyAppDelegate; 
@end 

私はタイプを心配する必要はありません。この方法は、すべてのキャスト。私はしばしば、このカテゴリをMyAppDelegateクラスと同じファイルに定義して実装します。これはヘッダーI #importです。あなたはすべてあなたのMyProject_Prefix.chpファイルに追加することができます。

あなたのアーキテクチャが正しく階層化されている場合、シングルトンは悪くありません(そして、それは完全にテスト可能です)

関連する問題