、:私の実装ファイルで
@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
辞書を作成します。
アプリケーションの起動が完了すると、メンバーdatabaseName
はNSUserDefaults
ディクショナリに設定された値を引き継ぎます。これはkDefaultDatabaseName
か、アプリケーションの実行後に更新されたものであってもかまいません。
アプリケーションを実行している間、ユーザーはdatabaseName
の値を別のものに変更することがあります。
アプリケーションが終了する直前に、databaseName
という値がNSUserDefaults
辞書に書き込まれます。次にアプリケーションを開くときには、databaseName
は新しい更新された値を引き継ぎます。
この更新プログラムを辞書に書き込む前に、アプリケーションが終了するのを待つ必要はありません。たとえば、ユーザーがdatabaseName
を新しいものに変更した直後にこれを行うことができます。しかし、それはあなた次第です。