2011-02-07 1 views
1

私は4つの異なるタブを持つタブバーアプリケーションを持っています(4種類のビュー)すべてのビューからアクセスできるようにしたいNSDictionaryをロードするには最適な場所は何ですか?

私のアプリが最初に起動するとき、私がする必要があるのはplistにある私のデータを持ち込むことです。これは問題ではありません。私の問題は、データが別の方法で各タブに表示されることです。

データをロードする最適な場所はどこですか?

現在、私は最初のviewControllerのviewDidLoadを使用しています。しかし、ここから、他のビューでデータを利用できるようにするにはどうすればよいと思いますか?おそらく他の3つのビューを1番目のビューの代理人にするのでしょうか?

アドバイスをいただければ幸いです。 ご協力ありがとうございます。 マイク。

答えて

2

4つのビューのそれぞれが辞書への参照を持つことができない理由はわかりません。アプリケーションがplistから読み込みを行い、参照を設定します。あなたのデータは非常に大きいですか?

+0

私はあなたがappDelegateでこの種の設定をすることはできないと思いませんでした。これは多くの意味があります。私はまだプログラミングの学習段階にいます。ありがとうございました。シングルトンの場合は+1 –

0

タブバービューでの経験はありませんが、singleton classを作成して、辞書にグローバルにアクセスできるようです。

+0

+1 – Moshe

+0

モデルオブジェクトへの定期的なアクセスを提供するために、強制的なシングルトンを使用することに反対することをお勧めします。[SOのシングルスレッドについて](http://stackoverflow.com/questions/137975)または[私のブログ投稿](http:// zmotula .tumblr.com/post/1390385240)。 – zoul

1

これはoften asked question hereです。 MVC design patternをご覧ください。あなたの辞書はこのシナリオではモデルになり、それにアクセスする必要があるすべてのコントローラー/ビューには独自のプロパティが必要です。読み込みは、プログレスバーを持つ別のコントローラ/ビュー、アプリケーションデリゲート、または最初のタブで行うことができます。あなたの状況によって異なります。

クラスは、ビットのようになります。

@interface Model : NSObject {…} 
- (void) load; 
@end 

@interface ControllerA : UIViewController {…} 
@property(retain) Model *model; 
@end 

@interface ControllerB : UIViewController {…} 
@property(retain) Model *model; 
@end 

@implementation ApplicationDelegate 

- (void) applicationDidFinishLaunchingAndWhateverElseIsUsuallyHere 
{ 
    Model *model = [[Model alloc] init]; 
    [model load]; 

    ControllerA *controllerA = [[ControllerA alloc] init…]; 
    [controllerA setModel:model]; 
    ControllerB *controllerB = [[ControllerB alloc] init…]; 
    [controllerB setModel:model]; 
    [model release]; 

    // The syntax here is probably off, you should get the idea 
    UITabBarController *tabs = …; 
    [tabs setViewControllers:controllerA, controllerB, nil]; 

    [window addSubview:tabs.view]; 
    [window makeKeyAndVisible]; 
} 
+0

私は理解していると思います。私は自分のデータを保持するためのモデルを作成します。その後、アプリケーションデリゲート(または第1のタブビューコントローラ)を使用して、データをモデルに読み込むことができました。別のビューから私のモデルにアクセスできるようにするコードを表示してください。例)2番目のタブをクリックします。モデルへのポインタを取得するにはどうすればよいですか? –

2

私はそれを持っていた少しのデータは、私はAppDelegateクラスのプロパティを作りました。この方法では真のグローバルです。あなたのビューコントローラはすべてそれにアクセスできます

MyAppDelegate* delegate = [UIApplication sharedApplication].delegate; 
id thing = [delegate.myDictionary objectForKey:@"someKey"]; 
+0

アプリケーションデリゲートは、アプリケーションライフサイクルイベントなどを処理するためのものです。グローバルデータへのアクセスを提供するのは良い設計ではありません。この場合、データはグローバルではなく、複数のコントローラ間で共有されているだけです。また、[シングルトンの回答](http://stackoverflow.com/questions/4924350/whats-the-best-place-to-load-a-nsdictionary-you-want-to-be-accessible-to -all-vie/4924435#4924435)。 – zoul

+0

これは私には完全な意味があります、あなたの応答に感謝します。 –

関連する問題