2009-04-25 19 views
9

iPhoneアプリケーションの変数を長期間メモリに保存する最も簡単な方法は何ですか?iPhone - アプリケーションからユーザー設定を保存する方法は?

私は、さまざまなsqliteデータベースで動作するアプリケーションを持っています。アプリケーションを終了した後、最後のアクティブなデータベース名を保存して、ユーザーがアプリケーションに再び入ったときに最後のデータベースを開きます。

この目的のために特別なデータベースを作成し、それらの値を格納するのは便利ではありません。格納する変数が2つしかないためです。

これらの変数を保存する最も簡単な方法は何ですか?

ありがとうございます。

答えて

16

NSUserDefaultsは、このような設定に最適な場所です。私は次のように追加される場合があります私のヘッダファイルで

6

、:私の実装ファイルで

@interface myAppDelegate : NSObject <UIApplicationDelegate> { 
    ... 
    NSString *databaseName; 
} 
extern NSString * const kDefaultDatabaseName; 
extern NSString * const kAppDatabaseNameKey; 

、私は次のように追加します。

NSString * const kDefaultDatabaseName = @"myDefaultDatabaseName"; 
NSString * const kAppDatabaseNameKey = @"kAppDatabaseNameKey"; 

@implementation myAppDelegate 

+ (void) initialize { 
    if ([self class] == [MyAppDelegate class]) { 
    UIApplication* myApp = [UIApplication sharedApplication]; 

    NSString *defaultDatabaseName = kDefaultDatabaseName; 
    NSMutableDictionary *resourceDict = [NSMutableDictionary dictionary]; 
    [resourceDict setObject:defaultDatabaseName forKey:kAppDatabaseNameKey]; 
    } 
} 

- (void) applicationDidFinishLaunching:(UIApplication *)application { 
    ... 
    databaseName = [[NSUserDefaults standardUserDefaults] stringForKey: kAppDatabaseNameKey]; 
} 

... 

- (void) applicationWillTerminate:(UIApplication *)application { 
    ... 
    [[NSUserDefaults standardUserDefaults] setObject:databaseName forKey:kAppDatabaseNameKey] 
} 

アプリケーションが起動すると、何の前がない場合存在するユーザーの既定値である+initializeは、kDefaultDatabaseNameに既定のデータベースとして設定されているものを使用して、新しいNSUserDefaults辞書を作成します。

アプリケーションの起動が完了すると、メンバーdatabaseNameNSUserDefaultsディクショナリに設定された値を引き継ぎます。これはkDefaultDatabaseNameか、アプリケーションの実行後に更新されたものであってもかまいません。

アプリケーションを実行している間、ユーザーはdatabaseNameの値を別のものに変更することがあります。

アプリケーションが終了する直前に、databaseNameという値がNSUserDefaults辞書に書き込まれます。次にアプリケーションを開くときには、databaseNameは新しい更新された値を引き継ぎます。

この更新プログラムを辞書に書き込む前に、アプリケーションが終了するのを待つ必要はありません。たとえば、ユーザーがdatabaseNameを新しいものに変更した直後にこれを行うことができます。しかし、それはあなた次第です。

関連する問題