【问题标题】:Settings bundle not syncing up with NSUserDefaults [duplicate]设置包未与 NSUserDefaults 同步 [重复]
【发布时间】:2012-11-18 04:47:30
【问题描述】:

可能重复:
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

【问题讨论】:

    标签: ios nsuserdefaults settings.bundle


    【解决方案1】:

    应使用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: 的文档中所述。

    注册域的内容没有写入磁盘;您需要在每次应用程序启动时调用此方法。您可以在应用程序的 Resources 目录中放置一个 plist 文件,然后使用从该文件中读取的内容调用 registerDefaults:。

    【讨论】:

    • 这不就是registerDefaults: 的冗长乏味的手动版本吗,这才是真正的答案?
    • registerDefaults: 更糟糕,因为它实际上保留了这些默认值。如果您想在应用程序的下一个版本中更改默认值,您无法确定用户是否选择使用默认值,或者是否只是使用了默认值,因为用户从未更改过它。
    • 我发现了这个:ijure.org/wp/archives/179 我不敢相信 iOS 默认不会将默认值加载到 NSUserDefaults 中...这不是错误吗?
    • 感谢分享该链接。似乎应该自动设置默认值。但是,设置包更多地用作数据容器、属性列表,而不是确定任何隐式行为。
    猜你喜欢
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2012-03-27
    • 2021-12-29
    相关资源
    最近更新 更多