ios 8 键盘扩展设置包

Posted

技术标签:

【中文标题】ios 8 键盘扩展设置包【英文标题】:ios 8 keyboard extension settings bundle 【发布时间】:2014-08-20 12:16:01 【问题描述】:

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

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

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

以前有没有人遇到过扩展设置包的问题? 顺便说一句,这与设置包的默认值无关,因为每次我在启动键盘之前禁用和启用设置上的此属性以强制使用默认值。

【问题讨论】:

【参考方案1】:

虽然你已经在 Setting.bundle 的每个项目上设置了 DefaultValue,但它不会写在你的 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];

现在,您应该可以访问默认值了。希望对您有所帮助!

【讨论】:

以上是关于ios 8 键盘扩展设置包的主要内容,如果未能解决你的问题,请参考以下文章

iOS 8 自定义键盘扩展 UIKeyboardType

自定义键盘应用程序扩展 iOS 8 上的 Siri

在 iOS 8 键盘扩展中实现自动更正

获取 ios 8 自定义键盘扩展的“因内存错误而终止”

iOS 8 键盘扩展:出现呼叫栏时出现约束错误?

IOS 8 App Group 访问键盘扩展中的容器应用程序文件