我正在尝试在ios 8上为自定义键盘扩展创建设置包。 我已将设置包添加到键盘扩展目标。 然后当加载键盘视图时,我试图以下列方式访问设置包。
BOOL autoCapitalizationEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:@"autoCapitalizationEnabled"];
结果始终为0,似乎程序无法访问设置包文件。
有没有人在使用扩展程序设置捆绑包之前遇到此问题? 顺便说一下,这个东西与设置包的默认值无关,因为每次我在键盘启动前禁用并启用此属性以强制使用默认值。
答案 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];
现在,您应该能够访问默认值。希望它有所帮助!