1

NSUserDefaults オブジェクトが共有されていて、アプリ デリゲート内やいくつかのビュー コントローラー内からアクセスできるかどうか疑問に思っています。基本的に、アプリ デリゲートからビュー コントローラーにデータをやり取りする必要があります。シングルトンは使いたくない。NSUserDefauflts オブジェクトがこれを行う方法であるかどうか疑問に思っていました。

これが可能である場合、可能になるようにオブジェクトを初期化するにはどうすればよいですか?

ありがとう!

4

3 に答える 3

8

をそのまま使用する[NSUserDefaults standardUserDefaults]と、毎回同じインスタンスが返されます。その後、さまざまなクラスがそれを使用して、セッション間で永続的なデータを格納できます。

アプリのパーツ間でデータを渡したいだけで、データを保存しようとしていない場合、ユーザーの既定値は適切な方法ではありません。渡す必要のあるデータを入力として受け取るクラスのメソッドまたはプロパティを公開する必要があります。

于 2012-08-13T18:25:06.223 に答える
3

まあ、それはそうですが、それは実際には設計されたものではありません. 通常の設計パターンでは、View Controller 間で「手動で」オブジェクトをやり取りします。ビュー コントローラをアプリケーションの残りの部分から可能な限り独立 (再利用可能) にする必要があります。それらを結びつけることNSUserDefaultsは、それを行うための良い方法ではありません!

于 2012-08-13T18:25:25.380 に答える
2

アプリのデリゲートで処理を行うべきではありません。理想的には、ウィンドウ、ルート ビュー コントローラー (ストーリーボードで実行しない場合)、およびモデルを初期化する必要があります。それだけです。すべての処理は別の場所で行う必要があります (ほとんどの場合、モデル クラスと通信するビュー コントローラー内)。

ルート モデル クラスをシングルトンにして、すべてのビュー コントローラーが選択したインターフェイスを介して対話できるようにします。

シングルトンを作るのは難しくありません:

@interface MyModel: NSObject

+ (MyModel *)sharedModel;

@end

そして実装:

@implementation MyModel

+ (MyModel *)sharedModel
{
    static MyModel* modelSingleton = nil;
    static dispatch_once_t once;
    dispatch_once(&once, ^{
        modelSingleton = [[MyModel alloc] init];
    });

    return modelSingleton;
}

@end

そして、次を使用するだけです:

[MyModel sharedModel]

をクリックしてアクセスします。

于 2012-08-13T18:35:04.783 に答える