Параметры набора параметров неверно связаны на iPhone - PullRequest
3 голосов
/ 19 октября 2011

У меня есть проблема, с которой я боролся в течение последних нескольких дней.У меня есть пакет настроек, root.plist, который содержит некоторые пользовательские настройки.В нем три многозначных пункта меню.Один возвращает логическое значение, два других возвращают числа.

Когда я вызываю [[NSUserDefaults standardUserDefaults] dictionaryRepresentation] и проверяю его в консоли, только первый элемент в списке свойств показывает его значение.Два других явно отсутствуют.В результате, когда я пытаюсь получить эти значения, я получаю ноль.

Что удивительнее, так это то, что набор настроек выглядит правильно в приложении «Настройки» на iPhone.Единственное, что не работает, это то, что значения не передаются.Что касается моего приложения, то два других многозначных пункта меню даже не существуют.

Любые предложения приветствуются.

Ответы [ 2 ]

6 голосов
/ 19 октября 2011

Я использовал этот блок кода несколько раз в applicationDidFinishLaunchingWithOptions для инициализации моих пользовательских настроек по умолчанию.

    if (![[NSUserDefaults standardUserDefaults] objectForKey:@"somePropertyYouExpect"])  {

    NSString  *mainBundlePath = [[NSBundle mainBundle] bundlePath];
    NSString  *settingsPropertyListPath = [mainBundlePath
                                           stringByAppendingPathComponent:@"Settings.bundle/Root.plist"];

    NSDictionary *settingsPropertyList = [NSDictionary 
                                          dictionaryWithContentsOfFile:settingsPropertyListPath];

    NSMutableArray      *preferenceArray = [settingsPropertyList objectForKey:@"PreferenceSpecifiers"];
    NSMutableDictionary *registerableDictionary = [NSMutableDictionary dictionary];

    for (int i = 0; i < [preferenceArray count]; i++)  { 
        NSString  *key = [[preferenceArray objectAtIndex:i] objectForKey:@"Key"];

        if (key)  {
            id  value = [[preferenceArray objectAtIndex:i] objectForKey:@"DefaultValue"];
            [registerableDictionary setObject:value forKey:key];
        }
    }

    [[NSUserDefaults standardUserDefaults] registerDefaults:registerableDictionary]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
2 голосов
/ 19 октября 2011

Убедитесь, что вы используете - (void)registerDefaults:(NSDictionary *)dictionary на NSUserDefaults. В противном случае ваши значения по умолчанию не будут извлечены из пакета.

Это необходимо сделать в самом начале приложения, прежде чем пытаться получить любое из значений по умолчанию.

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html

...