В моем заголовочном файле я мог бы добавить следующее:
@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
создает новый словарь NSUserDefaults
с тем, что вы указали как базу данных по умолчанию в kDefaultDatabaseName
.
Когда приложение завершает запуск, элемент databaseName
принимает значение, установленное в словаре NSUserDefaults
. Это может быть kDefaultDatabaseName
или все, что было обновлено после запуска приложения.
Пока вы запускаете приложение, ваш пользователь может изменить значение databaseName
на другое значение.
Непосредственно перед завершением работы приложения значение databaseName
записывается в словарь NSUserDefaults
. При следующем открытии приложения databaseName
примет новое обновленное значение.
Вам не нужно ждать завершения приложения, прежде чем записывать это обновление в словарь. Например, вы можете сделать это сразу после того, как пользователь изменит databaseName
на что-то новое. Но это зависит от вас.