NSUserDefaults - пользовательские настройки приложения в Mac OS X, iOS

Cocoa

NSUserDefaults класс предоставляет программный интерфейс для взаимодействия с системными настройками приложения по умолчанию.

Во время выполнения, можно использовать объект NSUserDefaults для чтения системных настроек приложения по умолчанию. NSUserDefaults кэширует информацию, чтобы избежать необходимости открывать базу данных пользователя по умолчанию каждый раз при необходимости извлечения значения по умолчанию. Метод synchronize, автоматически вызывается через определенные промежутки времени, сохраняя в памяти кэша синхронизацию с базой данных значений пользователя по умолчанию.

Класс NSUserDefaults предоставляет удобные методы для доступа к общим типам, таким, как floats, doubles, integers, Booleans, и URL-адресам. Объект по умолчанию должен быть списоком свойств ( для коллекций комбинация экземпляров), то есть, например: NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary. Если вы хотите сохранить любой другой тип объекта, вы должны, как правило заархивировать его, создав экземпляр NSData.

Из обозначенного выше следует, что сохраняемые объекты NSArray, NSDictionary должны содержать только перечисленные типы, и если у Вас в массиве храниться значение с типом int (например), то необходимо создать новый массив и сохранить в нем это значение приведенное к NSNumber.

Значения, возвращаемые из NSUserDefaults являются неизменными, даже если вы установите изменяемый объект в качестве значения. Например:

  NSUserDefaults* userDef = [NSUserDefaults standardUserDefaults];
  NSMutableString* str1 = [userDef stringForKey:@"model"];
str1 в действительности будет указывать на экземпляр объекта NSString.

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

Если приложение поддерживает управляемые среды, вы можете использовать объект NSUserDefaults чтобы определить, какие предпочтения по умолчанию управляются администратором на благо пользователей. Управляемые среды соответствуют компьютерным классам, где администратор или учитель может настроить систему определенным образом. В таких ситуациях, преподаватель может создать набор настроек по умолчанию и заставить всех использовать именно их. Если предпочтение по умолчанию управляется таким образом, приложение должно запретить пользователям редактировать настройки по умолчанию.

NSUserDefaults является потоко-защищенным.

Использование NSUserDefaults

NSUserDefaults* def = [[NSUserDefaults alloc]init];
NSString* defName = [def stringForKey:@"defaultName"];
NSInteger defAge = [def integerForKey:@"ageForDefault"];

Сохраним небольшой объект с данными в предпочтения по умолчанию.

Имеем класс с данными:

@interface mbXml : NSObject
{
  NSString* xmlAs;
  NSInteger priority;
}

@property (copy)NSString* xmlAs;
@property NSInteger priority;
@end

Создадим массив с типами данных пригодных для использования в NSUserDefaults из экземпляра класса mbXml.

// mbXml* xml - предположим уже создан, как и NSUserDefaults* def
NSArray* arrayX = [NSArray arrayWithObjects: xml.xmlAs, [NSNumber numberWithInteger:xml.priority], nil];
[def setValue:arrayX forKey:@"xmlPropertyDef"]; // записали объект массив в NSUserDefaults
[def synchronize]; // синхронизировали измененные данные (записали в файл системы).

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

// NSUserDefaults* def - предположим уже создан
mbXml* xml = [[mbXml alloc] init]; // Создали экземпляр класса mbXml
// теперь заполним его данными
NSArray* arrX = [def objectForKey:@"xmlPropertyDef"];
xml.xmlAs = [arrX objectAtIndex:0];
xml.priority = [[arrX objectAtIndex:1] integerValue];

Все очень просто, массивы могут содержать другие массивы, самое главное, чтобы сохраняемые данные соответствовали поддерживаемым NSUserDefaults типам: NSData, NSString, NSNumber, NSDate, NSArray или NSDictionary.

 

Пример использования NSUserDefaults для сохранения объектов методом архивирования приведен в разделе "Архитектура печати Cocoa Mac OS X", данным способом можно сохранить любые данные, приведя их к NSData.

 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac