Уроки iPhone SDK: (Часть 1) Создание файла настроек, отображаемого в меню Settings Wild West Guns - банк “берем” на рассвете!
Май 15

Вот мы и добрались до второй части урока по настройкам приложения. В этот раз нам предстоит разобраться со значениями для него по умолчанию. Сделаем мы это по методу applicationDidFinishLoading. Те, кто еще не прочел первую часть урока, могут сделать это [здесь] (все рассматриваемые ниже файлы были созданы на первом этапе).

Для начала откроем файл Root.plist и укажем для Title значение “RootPList” (в противном случае предложенный ниже код может не работать — по крайней мере, у меня дело обстояло именно так).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
FileName: ApplicationPreferencesTutorialAppDelegate.m
//Здесь мы указываем значения по умолчанию
NSString *textValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"textEntry_Key"];

//Если первое значение равно нулю, значит, настройки по умолчанию не заданы.
if(textValue == nil)
{
//Получаем доступ к бандлу
NSString *bPath = [[NSBundle mainBundle] bundlePath];
NSString *settingsPath = [bPath stringByAppendingPathComponent:@"Settings.bundle"];
NSString *plistFile = [settingsPath stringByAppendingPathComponent:@"Root.plist"];

//Получаем из словаря массив настроек
NSDictionary *settingsDictionary = [NSDictionary dictionaryWithContentsOfFile:plistFile];
NSArray *preferencesArray = [settingsDictionary objectForKey:@"PreferenceSpecifiers"];

//Временные переменные
NSDictionary *item;
NSString *textEntry_Key;
NSString *readOnly_Key;
NSString *toogle_Key;
NSString *slider_Key;
NSString *colors_Key;

//Циклический поиск в массиве (элемента preferencesArray)
{
//Получение ключа элемента
NSString *keyValue = [item objectForKey:@"Key"];

//Получение значения по умолчанию из файла plist
id defaultValue = [item objectForKey:@"DefaultValue"];

if([keyValue isEqualToString:@"textEntry_key"])
textEntry_Key = defaultValue;

if([keyValue isEqualToString:@"readOnly_key"])
readOnly_Key = defaultValue;

if([keyValue isEqualToString:@"toogle_key"])
toogle_Key = defaultValue;

if([keyValue isEqualToString:@"slider_key"])
slider_Key = defaultValue;

if([keyValue isEqualToString:@"colors_key"])
colors_Key = defaultValue;
}

//Теперь, когда у нас есть все значения по умолчанию,
//Создаем его здесь.
NSDictionary *appPrerfs = [NSDictionary dictionaryWithObjectsAndKeys:
textEntry_Key, @"textEntry_key",
readOnly_Key, @"readOnly_key",
toogle_Key, @"toogle_key",
slider_Key, @"slider_key",
[NSNumber numberWithInt:1], @"slider_key",
[NSNumber numberWithInt:1], @"colors_key",
nil];

//Регистрируем и сохраняем файл на диск
[[NSUserDefaults standardUserDefaults] registerDefaults:appPrerfs];
[[NSUserDefaults standardUserDefaults] synchronize];

Для начала проверим, указаны ли теперь значения по умолчанию для данного приложения. Если нет, придется их создать, зарегистрировать и синхронизировать с приложением.

В приведенном выше исходном коде я проверял наличие либо отсутствие значения для конкретного ключа. Если значение равно нулю, значит, параметры по умолчанию не заданы.

Для начала получим путь к файлу plist (он хранится в переменной с названием plistFile).

1
2
3
4
//Получаем путь доступа к бандлу
NSString *bPath = [[NSBundle mainBundle] bundlePath];
NSString *settingsPath = [bPath stringByAppendingPathComponent:@"Settings.bundle"];
NSString *plistFile = [settingsPath stringByAppendingPathComponent:@"Root.plist"];

Затем создаем словарь с содержимым файла списка свойств (plist /property list) и добавляем спецификаторы “PreferenceSpecifiers” в массив.

1
2
3
//Получение массива настроек из словаря
NSDictionary *settingsDictionary = [NSDictionary dictionaryWithContentsOfFile:plistFile];
NSArray *preferencesArray = [settingsDictionary objectForKey:@"PreferenceSpecifiers"];

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Теперь, когда у нас есть все значения по умолчанию.
//Создаем его здесь.
NSDictionary *appPrerfs = [NSDictionary dictionaryWithObjectsAndKeys:
textEntry_Key, @"textEntry_key",
readOnly_Key, @"readOnly_key",
toogle_Key, @"toogle_key",
slider_Key, @"slider_key",
[NSNumber numberWithInt:1], @"slider_key",
[NSNumber numberWithInt:1], @"colors_key",
nil];

//Регистрируем и сохраняем словарь на диск
[[NSUserDefaults standardUserDefaults] registerDefaults:appPrerfs];
[[NSUserDefaults standardUserDefaults] synchronize];

Обзаведясь всеми нужными данными, создадим еще один словарный объект с данными пар ключ–значение. Для регистрации объекта воспользуемся методом registerDefaults. Он зарегистрирует словарь в домен NSRegistrationDomain, который не нужно создавать вручную. Это всего лишь место, куда приложение будет отсылать временные переменные. После вызываем метод синхронизации, который перепишет все внесенные в домен изменения на диск.

Если приложение уже загружалось, удалите его из симулятора и снова запустите через XCode, проверив наличие настроек по умолчанию.

На этом вторую часть урока по настройкам приложения можно считать завершенной.

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

Текст оригинальной статьи на английском языке [здесь]

Уважаемые читатели, данный материал был переведен и подготовлен к публикации проектом LookApp.ru, при публикации на другом сайте ссылка на LookApp.ru обязательна.

1 звезда2 звезд3 звезд4 звезд5 звезд (3 голосов, средний: 5.00 из 5)
Загрузка ... Загрузка ...


2 Responses to “Уроки iPhone SDK: (Часть 2) Применение к настройкам приложения значений по умолчанию.”

  1. 1. elw Says:

    спасибо за перевод, однако все же рекомендую обратиться к программисту-профессионалу с просьбой откорректировать текст.

    > Сделаем мы это по методу applicationDidFinishLoading.
    “в методе”, а еще лучше “в обработчике события”, хотя это не 100% верно.

  2. 2. Artem Says:

    Спасибо за наводку. Ну переводчик у нас вполне профессиональный. Возможно недосмотрели просто немного. Если будете еще смотреть наши статьи и найдете что-то подобное, то пожалуйста оставьте коммент.

Оставьте комментарий