ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C Часть 1

NSUserDefaults (хранение данных)

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

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

<code data-result="[object Object]">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];
}</code>

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

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

<code data-result="[object Object]">[userDefaults setObject:@"Ivan" forKey:@"name"];
NSLog(@"name = %@", [userDefaults objectForKey:@"name"]);</code>

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

<code data-result="[object Object]">[userDefaults removeObjectForKey:@"age"];
NSLog(@"age = %i", [userDefaults integerForKey:@"age"]);</code>

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

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

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

 

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

Comments are closed.