设置捆绑值未在iPhone上正确链接

时间:2011-10-19 17:53:29

标签: iphone ios plist settings.bundle

我有一个问题,我在过去几天一直在努力。我有一个设置包,root.plist,它包含一些用户首选项。它有三个多值菜单项。一个返回一个布尔值,另外两个返回一个数字。

当我调用[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]并在控制台中检查它时,只有属性列表中的第一项显示其值。另外两个明显缺席。因此,当我尝试检索这些值时,我得到零。

更奇怪的是,设置包在iPhone上的“设置”应用中看起来是正确的。唯一不起作用的是值没有通过。就我的应用而言,其他两个多值菜单项甚至都不存在。

非常感谢任何建议。

2 个答案:

答案 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中拉出。

在尝试检索任何默认值之前,您必须在应用程序的早期执行此操作。

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html