ios 8键盘扩展设置包

时间:2014-08-20 12:16:02

标签: ios ios8 settings.bundle ios-app-extension

我正在尝试在ios 8上为自定义键盘扩展创建设置包。 我已将设置包添加到键盘扩展目标。 然后当加载键盘视图时,我试图以下列方式访问设置包。

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

结果始终为0,似乎程序无法访问设置包文件。

有没有人在使用扩展程序设置捆绑包之前遇到此问题? 顺便说一下,这个东西与设置包的默认值无关,因为每次我在键盘启动前禁用并启用此属性以强制使用默认值。

1 个答案:

答案 0 :(得分:0)

虽然您已在Setting.bundle上的每个项目上设置了DefaultValue,但它不会写在您的NSUserDefaults上,因此当您从NSUserDefaults检索时,它将返回null(在这种情况下,为“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];

现在,您应该能够访问默认值。希望它有所帮助!