iPhone - как сохранить пользовательские настройки из приложения? - PullRequest
9 голосов
/ 25 апреля 2009

Какой самый простой способ сохранить пару переменных в приложении iPhone в долговременной памяти?

У меня есть приложение, которое работает с различными базами данных sqlite, и я хочу после выхода из приложения сохранить последнее имя активной базы данных, чтобы открыть последнюю базу данных при повторном входе пользователя в приложение.

Немного неудобно создавать для этой цели специальную базу данных и хранить в ней эти значения, потому что у меня есть только пара переменных для хранения.

Какой самый простой способ хранения этих переменных?

Заранее спасибо.

Ответы [ 2 ]

16 голосов
/ 25 апреля 2009

NSUserDefaults - лучшее место для таких настроек.

6 голосов
/ 26 апреля 2009

В моем заголовочном файле я мог бы добавить следующее:

@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 на что-то новое. Но это зависит от вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...