Программирование под iPhone, iPad Objective-C уроки на русском статьи новости

2011-05-14 01:31


Чтобы сделать свою программу более гибкой и уникальной программисты добавляют в нее возможность настройки. Каждый пользователь настраивает программу на свой лад. Затем эти настройки сохраняются (нет необходимости заниматься настройкой после каждого запуска программы). По такому же принципу работают сохранения в играх. В этой статье я хочу рассказать как это реализуется.

 

На самом деле в каждом приложении установлена функция сохранения настроек, ее нужно лишь активировать. За процесс активации этой функции отвечает класс NSUserDefaults. Настройки можно сохранять, читать и удалять.
Как вы догадываетесь, все настройки хранятся в определенном файле. Это plist файл который находиться в каталоге вашего приложения ~Library/Preferences. Имя этого класса состоит с имени проекта, а точнее с так называемого Bundle identifier и приставки UserDefaults. То есть, если мы создадим проект с именем ExampleUserDefaults - наш файл настроек будет иметь имя ExampleUserDefaults.UserDefaults.plist. Если вы попытаетесь найти там этот файл - скорее всего у вас ничего не получится. Это потому, что мы еще ничего не сохраняли в нашем приложении. Давайте создадим проект с таким именем на основе представления (View-based Application). Затем откройте файл ExampleUserDefaultsViewController.m и раскомментируйте в нем метод viewDidLoad. После чего добавьте в него следующий код:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *result = [userDefaults objectForKey:@"name"];
if ([result length]) {
    NSLog(@"name = %@", [userDefaults objectForKey:@"name"]);
    NSLog(@"age = %i", [userDefaults integerForKey:@"age"]);
    NSLog(@"student = %i", [userDefaults boolForKey:@"student"]);
} else {
    NSLog(@"Add values to UserDefaults");
    [userDefaults setObject:@"Ira" forKey:@"name"];
    [userDefaults setInteger:24 forKey:@"age"];
    [userDefaults setBool:YES forKey:@"student"];
    [userDefaults synchronize];
}

Здесь я как раз и продемонстрировал возможность сохранения значений простых типов.

 

Для установки нового значения (как и в случае с NSMutableDictionary) нам следует просто записать новое значение под уже имеющимся ключом:

[userDefaults setObject:@"Ivan" forKey:@"name"];
NSLog(@"name = %@", [userDefaults objectForKey:@"name"]);

Процесс удаления объекта тоже ничем не отличается.

[userDefaults removeObjectForKey:@"age"];
NSLog(@"age = %i", [userDefaults integerForKey:@"age"]);

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

Сейчас как раз самое время посмотреть содержимое файла настроек. Где он храниться у меня на компьютере и само содержимое файла приведено на скриншотах ниже.

 

 

Это основные возможности класса NSUserDefaults. Если у вас возникли какие-то вопросы - задавайте их в комментариях и я дополню статью ответами.

 

Исходный код можно скачать здесь.