设置捆绑包默认值不会设置

Mc.*_*ver 14 objective-c nsuserdefaults ios settings.bundle

我有一个带有settings.bundle的iOS应用程序,它可以处理我的应用程序的各种设置Switch toggle.我在root.plist文件中设置了默认值(使用DefaultValue属性),YES但是只要应用程序在设备或iOS模拟器上启动,所有值都会出现NO.它只在第一次发布时运作良好.

设置捆绑PLIST

我正在使用此代码检索默认值(我在这里做错了吗?):

NSUserDefaults *localeDefaults = [NSUserDefaults standardUserDefaults];
BOOL ENWORDS = [localeDefaults boolForKey:@"localetime"];
Run Code Online (Sandbox Code Playgroud)

Mat*_*uch 24

Settings.app使用默认值仅用于显示目的.如果您未更改设置应用程序中的值,则不会将任何内容保存到NSUserDefaults.

您必须自己注册默认值.使用这样的东西application:didFinishLaunchingWithOptions::

NSDictionary *userDefaultsDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
                                      [NSNumber numberWithBool:YES], @"localetime",
                                      nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsDefaults];
Run Code Online (Sandbox Code Playgroud)

  • +1是最好的建议,但这是一种解决方法,因为这样设置的值可能与plist中的默认值不同.如果用户没有设置任何内容,最好将plist中的默认值作为要显示的值. (2认同)

dea*_*rne 22

这篇博客文章可能有所帮助:http://greghaygood.com/2009/03/09/updating-nsuserdefaults-from-settingsbundle

tl; dr - 直到用户打开设置页面,然后默认值不会复制到您的应用程序中.这是Apple的预期行为.

我个人认为这很可怕.这意味着您必须在代码中设置默认值,以防用户启动您的应用程序而无需先进入设置页面(大约99%的用例都是如此!)

  • 请参阅 http://ijure.org/wp/archives/179,其中解释了当用户进入设置时并非所有类型都设置了默认值,并且在某些情况下,用户必须实际选择一个值而不是为该项目保存任何值之前的默认值。就我而言,我注意到多值项目未设置为默认值。 (3认同)

Mom*_*omi 15

问题是类型default Value必须boolean不是string;)删除此值并default Value再次添加另一个属性希望这有帮助

  • YEYEYEYES谢谢你! (2认同)

mr.*_*poe 5

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //< Register Defaults
    NSString *settingsBundlePath = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"];
    NSBundle *settingsBundle = [NSBundle bundleWithPath:settingsBundlePath];
    NSString *rootPlistPath = [settingsBundle pathForResource:@"Root" ofType:@"plist"];
    NSDictionary *settingsDict = [[NSDictionary alloc] initWithContentsOfFile:rootPlistPath];
    NSArray *settingsItems = [settingsDict objectForKey:@"PreferenceSpecifiers"];
    NSMutableDictionary *defaultDict = [NSMutableDictionary new];
    for (NSDictionary *itemDict in settingsItems) {
        if ([itemDict objectForKey:@"DefaultValue"]) {
            [defaultDict setObject:[itemDict objectForKey:@"DefaultValue"] forKey:[itemDict objectForKey:@"Key"]];
        }
    }
    [[NSUserDefaults standardUserDefaults] registerDefaults:defaultDict];
    //< Following Code
}
Run Code Online (Sandbox Code Playgroud)