|
Май
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, проверив наличие настроек по умолчанию.
На этом вторую часть урока по настройкам приложения можно считать завершенной.


Июль 6th, 2009 at 10:04
спасибо за перевод, однако все же рекомендую обратиться к программисту-профессионалу с просьбой откорректировать текст.
> Сделаем мы это по методу applicationDidFinishLoading.
“в методе”, а еще лучше “в обработчике события”, хотя это не 100% верно.
Июль 6th, 2009 at 12:59
Спасибо за наводку. Ну переводчик у нас вполне профессиональный. Возможно недосмотрели просто немного. Если будете еще смотреть наши статьи и найдете что-то подобное, то пожалуйста оставьте коммент.