Набор настроек расширения клавиатуры ios 8

Я пытаюсь создать набор настроек для пользовательского расширения клавиатуры на ios 8. Я добавил набор настроек для расширения клавиатуры. Затем, когда загружается представление клавиатуры, я пытаюсь получить доступ к установочному набору следующим образом.

BOOL autoCapitalizationEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"autoCapitalizationEnabled"];

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

У кого-то есть проблема, связанная с настройкой параметров расширения? Кстати, дело не связано со стандартными значениями набора параметров, потому что каждый раз, когда я отключаю и включаю это свойство в настройки до того, как клавиатура начнет использовать значение по умолчанию.

Ответ 1

Хотя вы установили DefaultValue для каждого элемента в параметре Setting.bundle, он не будет записан на вас NSUserDefaults, поэтому, когда вы извлекаете из NSUserDefaults, он возвращает нуль (в данном случае "0" или NO, без разницы).

Выполните следующие действия, чтобы настроить свои настройки в NSUserDefaults при первом запуске.

Сначала вы проверите, уже ли вы проверили и установили значения по умолчанию:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

if ([userDefaults boolForKey:@"PreferenceFirstSetup"]) {

    //return if you already done the job once.
    return;
}

И если нет, задайте значения по умолчанию...

[userDefaults setBool:YES forKey:@"PreferenceFirstSetup"];

NSString *settingsPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@"Settings.bundle"];
NSString *rootPath = [settingsPath stringByAppendingPathComponent:@"Root.plist"];

NSDictionary *settingsDictionary = [NSDictionary dictionaryWithContentsOfFile:rootPath];
NSArray *preferencesArray = [settingsDictionary objectForKey:@"PreferenceSpecifiers"];

for (NSDictionary *item in preferencesArray) {

    NSString *key = [item objectForKey:@"Key"];
    id defaultValue = [item objectForKey:@"DefaultValue"];

    if (key && defaultValue)
        [userDefaults setObject:defaultValue forKey:key];
}

//Save on disk
[userDefaults synchronize];

Теперь вы должны иметь доступ к значениям по умолчанию. Надеюсь, это поможет!