Using Preference Services

Core Foundation Preference Services обеспечивает функции для чтения и записи предпочтений к и от любого доступного предпочтительного домена (см. Preference Services). Предпочтительные данные хранятся в списках свойств как серия пар ключ/значение. Ключ является строкой, идентифицирующей предпочтение. Значение является предпочтительной установкой, которая может быть любым из следующих типов данных: CFData, CFString, CFArray, CFDictionary, CFDate, CFBoolean и CFNumber. Когда значение является CFArray или CFDictionary, каждый из его элементов должен быть одним из позволенных типов данных. За исключением CFBoolean (который не имеет никакого эквивалентного объекта), каждый из Базовых типов Основы является взаимозаменяемым их эквивалентами Какао (NSData, NSString, и т.д).

Чтение и запись предпочтений похожи на это:

#include <CoreFoundation/CFPreferences.h>
 
CFStringRef appID, userName, hostName; // Assigned elsewhere
CFStringRef key = CFSTR(“PrefKey”);
CFPropertyListRef value; // Any allowed data type
 
value = CFPreferencesCopyValue(key, appID, userName, hostName);
CFPreferencesSetValue(key, value, appID, userName, hostName);

Если ключ не существует в данном домене, CFPreferencesCopyValue функциональные возвраты NULL. С другой стороны, передача NULL к CFPreferencesSetValue поскольку значение ключа удаляет ключ из того домена. По причинам производительности кэшируются изменения, внесенные в домен. Чтобы вынудить изменения быть сброшенными к диску, вызвать CFPreferencesSynchronize для определенного домена. Это может быть дорогой работой, так как она требует доступа к диску, не синхронизируйтесь слишком часто.

Несколько функций удобства автоматически перерывают домены определенного приложения для требуемого значения ключа и присваиваемого значения. Поисковые доходы от самого определенного домена — текущий пользователь, определенное приложение, текущий узел — наверху Таблицы 1 к самому общему домену — любой пользователь, любое приложение, любой узел — у основания таблицы, до соответствующего ключа найдены. При записи значения это сохранено в домене приложения по умолчанию: текущий пользователь, определенное приложение, любой узел. Использование этих подпрограмм похоже на это:

value = CFPreferencesCopyAppValue(key, appID);
CFPreferencesSetAppValue(key, value, appID);

Если комплект приложений совместно использует определенные предпочтения, они могут быть сохранены вместе в их собственном наборе доменов, определенных комплектом ID, подобный идентификатору приложения. Домены комплекта могут быть добавлены к пути поиска CFPreferencesCopyAppValue функция с CFPreferencesAddSuitePreferencesToApp функция. Могут быть добавлены многократные комплекты доменов. После поиска каждого специализированного домена Preference Services ищет соответствующие специфичные для комплекта домены прежде, чем искать общий домен. Предпочтения все еще сохранены в домене приложения по умолчанию при использовании этих функций, все же.

Для специфичных для пользователя и специализированных предпочтений должны быть достаточными эти функции. Для предпочтений системного уровня необходимо использовать более общие функции.