我有一个问题,我在过去几天一直在努力。我有一个设置包,root.plist,它包含一些用户首选项。它有三个多值菜单项。一个返回一个布尔值,另外两个返回一个数字。
当我调用[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]
并在控制台中检查它时,只有属性列表中的第一项显示其值。另外两个明显缺席。因此,当我尝试检索这些值时,我得到零。
更奇怪的是,设置包在iPhone上的“设置”应用中看起来是正确的。唯一不起作用的是值没有通过。就我的应用而言,其他两个多值菜单项甚至都不存在。
非常感谢任何建议。
答案 0 :(得分:6)
我已在applicationDidFinishLaunchingWithOptions
中多次使用此代码块来初始化我的用户默认值。
if (![[NSUserDefaults standardUserDefaults] objectForKey:@"somePropertyYouExpect"]) {
NSString *mainBundlePath = [[NSBundle mainBundle] bundlePath];
NSString *settingsPropertyListPath = [mainBundlePath
stringByAppendingPathComponent:@"Settings.bundle/Root.plist"];
NSDictionary *settingsPropertyList = [NSDictionary
dictionaryWithContentsOfFile:settingsPropertyListPath];
NSMutableArray *preferenceArray = [settingsPropertyList objectForKey:@"PreferenceSpecifiers"];
NSMutableDictionary *registerableDictionary = [NSMutableDictionary dictionary];
for (int i = 0; i < [preferenceArray count]; i++) {
NSString *key = [[preferenceArray objectAtIndex:i] objectForKey:@"Key"];
if (key) {
id value = [[preferenceArray objectAtIndex:i] objectForKey:@"DefaultValue"];
[registerableDictionary setObject:value forKey:key];
}
}
[[NSUserDefaults standardUserDefaults] registerDefaults:registerableDictionary];
[[NSUserDefaults standardUserDefaults] synchronize];
}
答案 1 :(得分:2)
确保您在- (void)registerDefaults:(NSDictionary *)dictionary
上使用NSUserDefaults
。否则,您的默认值将不会从Bundle中拉出。
在尝试检索任何默认值之前,您必须在应用程序的早期执行此操作。