Работа с пользовательскими значениями по умолчанию в Xamarin.iOS

В этой статье рассматривается работа с NSUserDefault для сохранения параметров по умолчанию в приложении или расширении Xamarin.iOS.

Класс NSUserDefaults предоставляет способ программного взаимодействия приложений и расширений iOS с системой по умолчанию на уровне системы. Используя систему по умолчанию, пользователь может настроить поведение приложения или стили для удовлетворения своих предпочтений (на основе дизайна приложения). Например, чтобы представить данные в метриках и имперских измерениях или выбрать определенную тему пользовательского интерфейса.

При использовании с группами NSUserDefaults приложений также предоставляет способ обмена данными между приложениями (или расширениями) в данной группе.

Сведения о значениях по умолчанию пользователя

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

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

Внимание

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

Класс NSUserDefaults содержит несколько удобных методов чтения и записи значений предпочтений для распространенных типов данных, таких как string, целочисленное число, float, boolean и URL-адреса. Другие типы данных можно архивировать с помощью NSData, а затем считывать из базы данных по умолчанию пользователя или записывать их из нее. Дополнительные сведения см. в разделе "Настройки Apple" и руководство по программированию Параметры.

Доступ к общему экземпляру NSUserDefaults

Экземпляр по умолчанию общего пользователя предоставляет доступ к пользовательским значениям по умолчанию для текущего пользователя устройства. Если объект Shared Defaults не существует, он создается при первом доступе и инициализации со следующими сведениями:

  • Состоящий NSArgumentDomain из синтаксического анализа по умолчанию из текущего приложения.
  • Домен идентификатора пакета приложения.
  • Состоящий NSGlobalDomain из значений по умолчанию, общих для всех приложений.
  • Отдельный домен для каждого предпочитаемого языка пользователя.
  • Набор NSRegistrationDomain временных значений по умолчанию, которые могут быть изменены приложением, чтобы убедиться, что поиски всегда успешны.

Чтобы получить доступ к экземпляру по умолчанию общего пользователя, используйте следующий код:

// Get Shared User Defaults
var plist = NSUserDefaults.StandardUserDefaults;

Доступ к экземпляру группы приложений NSUserDefaults

Как указано выше, с помощью групп NSUserDefaults приложений можно использовать для обмена данными между приложениями (или расширениями) в данной группе. Сначала необходимо убедиться, что группа приложений и необходимые идентификаторы приложений были правильно настроены в разделе "Сертификаты, идентификаторы и профили" в Центр разработки iOS и были установлены в среде разработки.

Затем проекты приложений и (или) расширений должны иметь один из допустимых идентификаторов приложений, созданных выше, и Entitlements.plist файл должен быть включен в пакет приложений с включенными и указанными группами приложений.

При этом доступ к общим значениям пользователя группы приложений по умолчанию можно получить с помощью следующего кода:

// Get App Group User Defaults
var plist = new NSUserDefaults ("group.com.xamarin.todaysharing", NSUserDefaultsType.SuiteName);

Где group.com.xamarin.todaysharing находится группа приложений, созданная в сертификатах, идентификаторах и профилях , к которым вы хотите получить доступ. Дополнительные сведения см. в документации по возможностям группы приложений .

Чтение значений по умолчанию

После получения доступа к требуемой базе данных по умолчанию можно считывать значения из значений по умолчанию с помощью пар "ключ-значение" и нескольких удобных методов на основе типа считываемых данных:

  • ArrayForKey — возвращает массив для заданного NSObjects значения ключа.
  • BoolForKey — возвращает логическое значение для заданного ключа.
  • DataForKey — возвращает NSData объект для заданного ключа.
  • DictionaryForKey — возвращает NSDictionary значение для заданного ключа.
  • DoubleForKey — возвращает двойное значение для заданного ключа.
  • FloatForKey — возвращает значение с плавающей запятой для заданного ключа.
  • IntForKey — возвращает целочисленное значение для заданного ключа.
  • StringArrayForKey — возвращает массив объектов из заданного String значения ключа.
  • StringForKey — возвращает строковое значение для заданного ключа.
  • URLForKey — возвращает NSUrl значение для заданного ключа.

Например, следующий код считывает логическое значение из пользовательских значений по умолчанию:

// Get Shared User Defaults
var plist = NSUserDefaults.StandardUserDefaults;
...

// Get value
var useHeader = plist.BoolForKey("UseHeader");

Написание значений по умолчанию

Как и при чтении приведенных выше значений, после доступа к требуемой базе данных пользователя по умолчанию можно записывать значения в значения по умолчанию с помощью пар "ключ-значение" и нескольких удобных методов на основе типа записываемых данных:

  • SetBool — записывает заданное логическое значение в заданный ключ.
  • SetDouble — записывает заданное двойное значение в заданный ключ.
  • SetFloat — записывает заданное значение с плавающей запятой в заданный ключ.
  • SetString — записывает заданное строковое значение в заданный ключ.
  • SetURL — записывает заданное значение URL-адреса вNSUrl заданный ключ.

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

// Get Shared User Defaults
var plist = NSUserDefaults.StandardUserDefaults;
...

// Save value
plist.SetBool(useHeader, "UseHeader");
...

Внимание

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

Итоги

В этой статье описан NSUserDefaults класс и его использование для предоставления набора параметров, которые может использовать конечный пользователь для настройки приложения Xamarin.iOS. Кроме того, он рассмотрел использование групп приложений для обмена данными между расширением и родительским приложением или между приложениями в группе.