设置包未与NSUserDefaults同步

时间:2012-11-18 04:47:30

标签: ios nsuserdefaults settings.bundle

  

可能重复:
  Multivalue type settings bundle fields alway return null

我的iOS应用中有一个设置包,可在设置app

中生成下表

在我的应用中,我尝试使用NSUserDefaults生成相同的表,最后得到this

我检索值的代码是:

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults];
ds->use_cache = [userDefaults boolForKey:@"use_cache"];
ds->high_bitrate = [userDefaults boolForKey:@"high_bitrate"];

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[[cell detailTextLabel] setText:[defaults stringForKey:@"version"]];

具有键“version”的stringForKey始终返回空值。我似乎无法让我的应用程序识别我在设置包中定义的默认参数。

以下是我的设置bundle

1 个答案:

答案 0 :(得分:3)

应使用registerDefaults:方法设置设置的默认值。这会设置一个NSRegistrationDomain,从中可以获得它们。下面是一个例子。感谢jrturton& Matthias Bauch用我之前提到http://greghaygood.com/2009/03/09/updating-nsuserdefaults-from-settingsbundle的第一个答案来指出问题。

NSDictionary *appDefaults = [ NSDictionary
                              dictionaryWithObject:@"default_version_value" forKey:@"version" ];

[ [ NSUserDefaults standardUserDefaults ] registerDefaults:appDefaults ];

NSUserDefaults *userDefaults = [ NSUserDefaults standardUserDefaults ];

另请注意,每次应用程序启动时都需要设置这些默认值,如registerDefaults:文档中所述。

  

注册域的内容不会写入磁盘;每次应用程序启动时都需要调用此方法。您可以将plist文件放在应用程序的Resources目录中,并使用从该文件中读取的内容调用registerDefaults:。