2011-06-14 9 views
0

私はシンプルなデザインの質問があります。このコードは私のappDelegateにあります。 NSDictionaryカテゴリのすべての画像を読み込むために使用します。次にNavigationViewControllerメインメソッドのinitメソッドに辞書を渡します。私はどこでも同じアイコンを使用しているので、NavigationViewControllerによってプッシュされたすべてのviewControllerを通して辞書を渡します。iOS:アプリケーションデザインに関する簡単な質問とviewControllersの間でNSDictionaryを共有する方法

これが正しい方法であるかどうか、私はメモリを浪費していますか?言い換えれば、私はviewControllersを介して辞書を渡す必要がありますか、または私はシングルトンを使用する必要があります..または何?私が現在このアプローチを採用しているのは、viewControllerからアプリケーションデリゲートへの参照がないからです。

//load categories pictures 
NSArray *categoriesKeys = [[NSArray alloc] initWithObjects: 
          @"comedy", 
          @"commercial", 
          @"education", 
          @"family", 
          @"media", 
          @"music", 
          @"performing", 
          @"sport", 
          nil]; 

categories = [[NSMutableDictionary alloc] init]; 

for (NSString *categKey in categoriesKeys) { 
    UIImage * categImage = [UIImage imageNamed:[[@"icons/" stringByAppendingString:categKey] stringByAppendingString:@".png"]]; 
    [categories setObject:categImage forKey:categKey]; 
} 

更新

のViewControllerのinitメソッド

FlickrAppDelegate* appDelegate = [UIApplication sharedApplication].delegate; 

categories = appDelegate.categories; 
categKeys = appDelegate.categoriesKeys; 

答えて

0

機能であなたのappDelegateですべてのコードを入れて、applicationDidFinishLaunchingメソッドでその関数を呼び出します。このようなアプリケーションの任意の場所にアクセスする

appNameDelegate* appDelegate = [UIApplication sharedApplication].delegate; 

[appdelegate.categories objectForKey:@"WhatEver"]; 
+0

これは、UIViewControllerがappDelegateのインターフェイスを知っていることを意味していることを意味していますか?しかし、これは悪いOOデザインではない場合は、私はそれに行くよりも。 – aneuryzm

+0

@Patrickこれはグローバル変数の要件です。 Look appDelegateはシングルトンクラスなので、プロパティを持つインスタンス変数にはアプリ内のどこにでもアクセスできます。 –

+0

OK。最後の1つの質問:質問に追加したコードはどうですか?私はオブジェクトをクラスメンバーに割り当てています(私はそれらがiVarと呼ばれていると思います)。違いますか ?私は辞書を2回割り当てていますか? – aneuryzm

1

おそらくシングルトンを作成します。多くの人がAppDelegateに共有コードを置くのが好きですが、そのファイルが混乱し、ファイル全体で何が起こっているのかが不明瞭になります。このロジック専用のシングルトンを使用すると、コードが分離され、変更が容易になります。

関連する問題