ios 8键盘扩展设置包

taf*_*rel 10 ios settings.bundle ios8 ios-app-extension

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

BOOL autoCapitalizationEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"autoCapitalizationEnabled"];
Run Code Online (Sandbox Code Playgroud)

结果总是0,似乎程序无法访问设置包文件.

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

For*_*nja 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;
}
Run Code Online (Sandbox Code Playgroud)

如果没有,让我们设置默认值......

[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];
Run Code Online (Sandbox Code Playgroud)

现在,您应该能够访问默认值。希望能帮助到你!