Как зарегистрировать пользовательское использование значений по умолчанию NSUserDefaults, не перезаписывая существующие значения?

У меня есть класс AppDelegate с +(void)initialize метод, который я использую для регистрации некоторых значений по умолчанию. Вот код, который я использую:

+ (void)initialize {
  NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];

  [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}

Я также создал Preferences.xib, который содержит несколько флажков (NSButton) то состояние дисплея предпочтений. Они связываются с NSUserDefaultsController с теми же ключами (fooKey и ячмень в этом случае). Каждый раз, когда я запускаю приложение и изменяю "значения по умолчанию", они восстанавливаются на следующем запуске приложения.

Существует ли способ зарегистрировать "значения по умолчанию по умолчанию", уже не перезаписав существующие значения? Возможно, каждый раз, когда я создаю и запускаю приложение, его предпочтительный файл воссоздается? Возможно, я должен развязать флажки от NSUserDefaultsController и поддержите значения ключей самостоятельно с некоторым пользовательским кодом в предпочтительном контроллере окна?

Я хотел бы услышать Вашу предпочтительную реализацию для поддержания пользовательских значений по умолчанию.

Я использую Mac OS X 10.6.2 и XCode 3.2.1

33
задан Eimantas 16 January 2010 в 09:16
поделиться

1 ответ

Из документации для -регистрации -регистрация: (акцент добавлен):

Содержание регистрационного домена не записано на диск; Вам необходимо позвонить в этот метод каждый раз, когда ваше приложение запускается . Вы можете разместить файл Plist в каталоге ресурсов приложения и вызовите RegisterDefaults: с содержимым, в котором вы прочитали из этого файла.

Итак, ваш код был на правильном пути. Вот как вы регистрируете по умолчанию по умолчанию.

Я обычно использую это в -ApplicationDIDFINISHLAUCHING: :

// Load default defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];

Использование plist позволяет легко добавлять и изменять по умолчанию в вашем приложении, и он предотвращает ошибку с использованием @ «Нет» как ценность тоже.

Редактировать: Swift 3 Вариант:

 UserDefaults.standard.register(defaults: NSDictionary(contentsOf: Bundle.main.url(forResource: "Defaults", withExtension: "plist")!)! as! [String : Any])
75
ответ дан 27 November 2019 в 17:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: