О пользовательской системе значений по умолчанию
Пользовательская система значений по умолчанию управляет хранением предпочтений каждого пользователя. Большинство предпочтений сохранено постоянно и поэтому не изменяется между последующими циклами запуска Вашего приложения. Приложения используют предпочтения для отслеживания инициируемых пользователями и инициируемых в программу изменений конфигурации.
Что делает хорошее предпочтение?
При определении предпочтений приложения лучше использовать простые значения и типы данных, когда это возможно. Предпочтительная система создается вокруг типов данных списка свойств, таких как строки, числа и даты. Несмотря на то, что можно использовать NSData
объект хранить произвольные объекты в предпочтениях, делая так не рекомендуется в большинстве случаев.
Хранить объекты постоянно означает, что Ваше приложение должно декодировать тот объект в некоторый момент. В случае предпочтений хранивший объект означает декодировать объект каждый раз, когда Вы получаете доступ к предпочтению. Это также означает, что более новая версия Вашего приложения должна гарантировать, что это в состоянии декодировать объекты, создаваемые и записанные в диск с помощью более ранней версии приложения, которое потенциально подвержено ошибкам.
Лучший подход для предпочтений должен сохранить простые строки и значения и использовать их для создания объектов потребности приложения. Хранение простых значений означает, что Ваше приложение может всегда получать доступ к значению. Единственной вещью, изменяющейся от выпуска до выпуска, является интерпретация простого значения и объектов, которые Ваше приложение создает в ответ.
Обеспечение предпочтительного интерфейса
Для бывших обращенным к пользователю предпочтений Таблица 1-1 перечисляет опции для отображения тех предпочтений пользователю. Как Вы видите от этой таблицы, большинство опций включает создание настроенного пользовательского интерфейса для управления и представления предпочтений. При создании приложения для iOS можно использовать пакет Настроек для представления предпочтений, но необходимо сделать так только для настроек, которые пользователь нечасто изменяет.
Предпочтение | iOS | OS X |
---|---|---|
Часто изменяемые предпочтения | Пользовательский UI | Пользовательский UI |
Нечасто изменяемые предпочтения | Пакет настроек | Пользовательский UI |
Предпочтения в приложениях Mac должны быть доступными от элемента Меню свойства в меню приложения. Создаваемое использование приложений какао шаблонов XCode предоставляет такой пункт меню Вам автоматически. Когда пользователь выбирает этот пункт меню, это - Ваша ответственность представить надлежащий пользовательский интерфейс. Можно обеспечить тот пользовательский интерфейс путем определения метода действия в делегате приложения, выводящем на экран пользовательское предпочтительное окно и соединение что метод действия для пункта меню в Интерфейсном Разработчике.
Нет никакого стандартного способа вывести на экран пользовательские предпочтения из приложения для iOS. Можно интегрировать предпочтения во многих отношениях, включая использование отдельной вкладки в интерфейсе панели вкладок или использовании пользовательской кнопки с одного из экранов приложения. Предпочтения должны обычно представляться с помощью отличного контроллера представления так, чтобы изменения в предпочтениях могли быть зарегистрированы, когда тот контроллер представления отклонен пользователем.
Организация предпочтений
Предпочтения сгруппированы в домены, каждый из которых имеет имя и определенное использование. Например, существует домен для специфичных для приложения предпочтений и другой для предпочтений в масштабе всей системы, применяющихся ко всем приложениям. Все предпочтения сохранены и получены доступ на основе в расчете на пользователя. Нет никакой поддержки совместного использования предпочтений между пользователями.
Каждое предпочтение имеет три компонента:
Домен, в котором это сохранено
Его имя (указанный как
NSString
объект)Его значение, которое может быть любым объектом списка свойств (
NSData
,NSString
,NSNumber
,NSDate
,NSArray
, илиNSDictionary
)
Время жизни предпочтения зависит, на котором домене Вы храните его в. Некоторые домены постоянно хранят предпочтения путем записи им в базу данных значений по умолчанию пользователя. Такие предпочтения продолжают существовать от одного запуска приложения до следующего. Другие домены хранят предпочтения более энергозависимым способом, сохраняя предпочтительные значения только для жизни соответствующего пользовательского объекта значений по умолчанию.
Поиск значения данного предпочтения продолжается через домены в NSUserDefaults
поисковый список объекта. Только домены в поисковом списке ищутся, и они ищутся в порядке, показанном в Таблице 1-2, начиная с NSArgumentDomain
домен. Когда предпочтение с указанным именем найдено, поиск заканчивается. Если многократные домены содержат то же предпочтение, значение принято от домена, самого близкого начало поискового списка.
Домен | Состояние |
---|---|
энергозависимый | |
Приложение (Идентифицированный идентификатором приложения) | персистентный |
персистентный | |
Языки (Идентифицированный именами языка) | энергозависимый |
энергозависимый |
Домен параметра
Домен параметра включает набор значений от параметров командной строки (если Вы запустили приложение с командной строки), и идентифицируется NSArgumentDomain
постоянный. Набор значений из командной строки автоматически помещается в этот домен системой. Для добавления значения к этому домену укажите предпочтительное имя на командной строке (предшествовал с дефисом), и следуйте за ним с соответствующим значением. Например, следующая команда запускает XCode и устанавливает значение IndexOnOpen
предпочтение к NO
:
localhost> Xcode.app/Contents/MacOS/Xcode -IndexOnOpen NO |
Предпочтительный набор из командной строки временно переопределяет установленные значения, сохраненные в базе данных значений по умолчанию пользователя. В предыдущем примере, устанавливая IndexOnOpen
предпочтение к NO
препятствует тому, чтобы XCode индексировал проекты автоматически, даже если предпочтение установлено в YES
в пользовательской базе данных значений по умолчанию.
Домен приложения
Домен приложения содержит специфичные для приложения предпочтения, которые сохранены в пользовательской базе данных значений по умолчанию текущего пользователя. Когда Вы используете совместно используемое NSUserDefaults
объект (или a NSUserDefaultsController
объект в OS X) для записи предпочтений те предпочтения автоматически помещаются в этот домен.
Поскольку этот домен специфичен для приложения, содержание домена связывается к идентификатору пакета Вашего приложения. Содержание этого домена сохранено в файле, которым управляет система. В настоящее время этот файл расположен в $HOME/Library/Preferences/
каталог, где $HOME является или корневым каталогом приложения или корневым каталогом пользователя (в зависимости от платформы и является ли Ваше приложение в песочнице). Имя пользовательского файла базы данных значений по умолчанию <ApplicationBundleIdentifer>.plist
, где <ApplicationBundleIdentifer> является идентификатором пакета Вашего приложения. Вы не должны изменять этот файл непосредственно, но можете проверить его во время отладки, чтобы удостовериться, что предпочтительные значения пишутся Вашим приложением.
Глобальный домен
Глобальный домен содержит предпочтения, которые применимы ко всем приложениям, и идентифицируется NSGlobalDomain
постоянный. Этот домен обычно используется системными платформами для хранения значений в масштабе всей системы и не должен использоваться приложением для хранения специфичных для приложения значений. Если Вы хотите изменить значение предпочтения в глобальном домене, запишите то же самое предпочтение в домен приложения с новым значением.
Примеры того, как системные платформы используют этот домен:
Экземпляры
NSRuleView
хранилище класса предпочтительные измерительные модули пользователя вAppleMeasurementUnits
ключ. Используя это место хранения заставляет представления линейки во всех приложениях использовать те же модули.Система использует
AppleLanguages
ключ для хранения предпочтительных языков пользователя как массива строк. Например, пользователь мог указать английский язык как предпочтительный язык, сопровождаемый испанским, французским, немецким, итальянским и шведским языком.
Домены языков
Для каждого языка в AppleLanguages
предпочтение, система записывает специфичные для языка предпочтительные значения в домене, имя которого основывается на имени языка. Каждый специфичный для языка домен содержит предпочтения соответствующей локали. Много классов в платформе Основы (такой как NSDate
, NSDateFormatter
, NSTimeZone
, NSString
, и NSScanner
классы), используют эту информацию о локали для изменения их поведения. Например, когда Вы запрашиваете строковое представление NSCalendarDate
объект, NSCalendarDate
возразите использует информацию о локали для нахождения имен месяцев и дней недели для предпочтительного языка пользователя.
Регистрационный домен
Если данное предпочтение не установлено явно в одном из других доменов, регистрационный домен определяет набор значений по умолчанию, чтобы использовать. Во время запуска приложение может вызвать registerDefaults:
метод NSUserDefaults
указать набор по умолчанию значений для важных предпочтений. Когда приложение запускается впервые, большинство предпочтений не имеет никаких значений, так получение их привело бы к неопределенным результатам. Регистрация ряда значений по умолчанию гарантирует, что Ваше приложение всегда имеет известный хороший набор значений для работы на.
Содержание регистрационного домена может быть установлено только при помощи registerDefaults:
метод.
Просмотр предпочтений Используя инструмент значений по умолчанию
В OS X, defaults
инструмент командной строки обеспечивает способ для Вас исследовать содержание пользовательской базы данных значений по умолчанию. Во время разработки приложений Вы могли бы использовать этот инструмент для проверки предпочтений, которые приложение пишет в диск. Чтобы сделать это, Вы использовали бы команду следующей формы из Терминального приложения:
defaults read
<идентификатор комплекта приложений>
Для чтения содержания глобального домена Вы использовали бы следующую команду:
defaults read NSGlobalDomain
Для получения дополнительной информации об использовании инструмента значений по умолчанию, чтобы читать и записать предпочтительные значения, посмотрите defaults
страница справочника.