Пользовательские значения по умолчанию и привязка
Много приложений обеспечивают предпочтительное окно, позволяющее пользователю настраивать настройки приложения. NSUserDefaultsController обеспечивает уровень поверх NSUserDefaults и позволяет Вам связывать атрибуты элементов интерфейса пользователя к соответствующему ключу в пользовательских значениях по умолчанию приложения.
Что такое NSUserDefaultsController?
NSUserDefaultsController является конкретным подклассом NSController, реализующего совместимый с привязкой интерфейс к NSUserDefaults. Свойства экземпляра NSUserDefaultsController обязаны с элементами интерфейса пользователя получить доступ и изменить значения, сохраненные с помощью NSUserDefaults.
Когда можно связать элемент интерфейса пользователя непосредственно со значением по умолчанию, NSUserDefaultsController обычно используется при реализации предпочтительного интерфейса окна приложения, или. NSUserDefaults остается основным программируемым интерфейсом к значениям по умолчанию Вашего приложения для остальной части Вашего приложения.
По умолчанию NSUserDefaultsController сразу применяет любые изменения, внесенные в его свойства. Это может быть сконфигурировано так, чтобы изменения не были применены, пока это не получает applyChanges:
сообщение, позволяя предпочтительному диалоговому окну поддерживать кнопку Apply. NSUserDefaultsController также поддерживает возвращение к последнему прикладному набору значений, с помощью revert:
метод.
NSUserDefaultsController также позволяет Вам обеспечивать словарь заводских настроек, которые могут использоваться для сброса пользователя конфигурируемые значения для приложения, обычно делавшегося в ответ на пользователя, нажимающего кнопку Revert to Factory Defaults.
Совместно используемый пользовательский контроллер значений по умолчанию
NSUserDefaultsController обеспечивает совместно используемый экземпляр себя через метод класса sharedUserDefaultsController
. Этот совместно используемый экземпляр использует экземпляр NSUserDefaults, возвращенный методом standardUserDefaults
как его модель, не имеет никаких начальных значений, и сразу применяет изменения, внесенные посредством его привязки.
Необходимо соблюдать осторожность, что изменения в настройках совместно используемого пользовательского контроллера значений по умолчанию внесены, прежде чем любые файлы пера, содержащие привязку к совместно используемому контроллеру, загружаются. Чтобы гарантировать, что эти изменения внесены, перед, любые файлы пера загружаются, они часто реализуются в initialize
метод класса делегата приложения, или в Вашем предпочтительном контроллере окна.
Привязка с совместно используемым пользовательским контроллером значений по умолчанию
Совместно используемый NSUserDefaultsController всегда доступен как связываемый контроллер в окне Bindings Info в Интерфейсном Разработчике. При установлении привязки с пользовательским значением по умолчанию, установленным Ключ Контроллера к values
, и Ключевой Путь Модели к ключу значения по умолчанию.
Создание привязки программно требует, чтобы Вы получили совместно используемый пользовательский контроллер значений по умолчанию с помощью метода класса NSUserDefaultsController sharedUserDefaultsController
. Вы тогда обеспечиваете тот объект как observableController к bind:toObject:withKeyPath:options:
метод.
Пример в Перечислении 1 устанавливает привязку между NSTextField (theTextField
) и userName
значение по умолчанию с помощью совместно используемого пользовательского контроллера значений по умолчанию.
Перечисление 1 , Связывающее ключ значений по умолчанию имени пользователя с NSTextField программно
[theTextField bind:@"value" |
toObject:[NSUserDefaultsController sharedUserDefaultsController] |
withKeyPath:@"values.userName" |
options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] |
forKey:@"NSContinuouslyUpdatesValue"]]; |
initialValues По сравнению с NSUserDefaults registerDefaults:
Словарь начальных значений позволяет Вам обеспечивать средние значения для сброса пользователя конфигурируемые значения по умолчанию к заводским настройкам. Обычно эти значения представляют подмножество значений по умолчанию что Ваши регистры приложения с помощью метода NSUserDefaults registerDefaults:
.
Вызов метода NSUserDefaultsController setInitialValues:
не должен считаться заменой для регистрации предпочтительного использования значений по умолчанию Вашего приложения NSUserDefault registerDefaults:
метод.
Пример в Перечислении 2 загружает значения по умолчанию из файла в обертке приложения, регистрирует те значения в NSUserDefaults, и затем регистрирует подмножество значений как начальные значения совместно используемого пользовательского контроллера значений по умолчанию. setupDefaults
метод вызвали бы от Вашего делегата приложения initialize
метод класса.
Перечисление 2 , Изменяющее начальные значения sharedUserDefaultsController экземпляра
+ (void)setupDefaults |
{ |
NSString *userDefaultsValuesPath; |
NSDictionary *userDefaultsValuesDict; |
NSDictionary *initialValuesDict; |
NSArray *resettableUserDefaultsKeys; |
// load the default values for the user defaults |
userDefaultsValuesPath=[[NSBundle mainBundle] pathForResource:@"UserDefaults" |
ofType:@"plist"]; |
userDefaultsValuesDict=[NSDictionary dictionaryWithContentsOfFile:userDefaultsValuesPath]; |
// set them in the standard user defaults |
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsValuesDict]; |
// if your application supports resetting a subset of the defaults to |
// factory values, you should set those values |
// in the shared user defaults controller |
resettableUserDefaultsKeys=[NSArray arrayWithObjects:@"Value1",@"Value2",@"Value3",nil]; |
initialValuesDict=[userDefaultsValuesDict dictionaryWithValuesForKeys:resettableUserDefaultsKeys]; |
// Set the initial values in the shared user defaults controller |
[[NSUserDefaultsController sharedUserDefaultsController] setInitialValues:initialValuesDict]; |
} |
Поисковый порядок на значения значений по умолчанию
: когда метод, который является значением ключа, кодирующим совместимые попытки получить значение для ключа от NSUserDefaultsController следующий поисковый образец используется,
Значение соответствующего ключа
values
Значение соответствующего ключа в экземпляре NSUserDefaults, возвращенном методом NSUserDefaultsController
defaults
.Значение соответствующего ключа в словаре начальных значений
Если никакое соответствующее значение не найдено, nil
возвращается.
Путь поиска несколько отличается при получении результата непосредственно от экземпляра NSUserDefaults, связанного с NSUserDefaultsController. В этом случае любые остающиеся без применения значения в NSUserDefaultsController, а также значения в словаре начальных значений проигнорированы.
Программно получающие доступ значения NSUserDefaultsController
Несмотря на то, что NSUserDefaults должен остаться Вашим основным программируемым интерфейсом к пользовательским значениям по умолчанию, некоторые обстоятельства требуют, чтобы Вы получили и установили значения по умолчанию, содержавшиеся в экземпляре NSUserDefaultsController непосредственно. Например, при реализации частей предпочтительного окна, непосредственно не взаимодействующих с существующей привязкой, такой как установка шрифта или выбор пути к каталогу.
Метод NSUserDefaultsController values
возвращает KVC-совместимый объект, использующийся для доступа к этим значениям по умолчанию. Для получения значения значения по умолчанию используйте valueForKey:
метод.
[[theDefaultsController values] valueForKey:@"userName"]; |
Точно так же для установки значения для значения по умолчанию использовать setValue:forKey:
.
[[theDefaultsController values] setValue:newUserName |
forKey:@"userName"]; |
NSUserDefaultsController автоматически обеспечивает, уведомление о значении изменяются на любую установленную привязку для того ключевого пути.