【问题标题】:Unexpected difference between NSUserDefaults and Settings.bundle (iOS 4.3)NSUserDefaults 和 Settings.bundle (iOS 4.3) 之间的意外差异
【发布时间】:2011-11-07 11:16:34
【问题描述】:

我的应用启动时首先要做的事情之一是为其设置注册默认值:

// Load default defaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];
[defaults synchronize];

Defaults.plist 看起来像这样:

<key>WorkingHoursFriday</key>
<integer>28800</integer>
<key>WorkingHoursMonday</key>
<integer>28800</integer>
<key>WorkingHoursSaturday</key>
<integer>0</integer>

正确的值稍后在dumping the defaults dictionary时显示:

WorkingHoursFriday = 28800;
WorkingHoursMonday = 28800;
WorkingHoursSaturday = 0;

使用[defaults floatForKey:@"WorkingHoursSaturday"]; 等专门检索它们时也会返回正确的值。

但是,“设置”应用显示这些设置的时间错误。这是我在 Settings.bundle 中的 Root.plist 的一部分:

    <dict>
        <key>Type</key>
        <string>PSMultiValueSpecifier</string>
        <key>Title</key>
        <string>Monday</string>
        <key>Key</key>
        <string>WorkingHoursMonday</string>
        <key>DefaultValue</key>
        <integer>28800</integer>
        <key>Titles</key>
        <array>
            <string>Free</string>
            <string>8 Hours</string>
            ...
        </array>
        <key>Values</key>
        <array>
            <integer>0</integer>
            <integer>28800</integer>
            ...
        </array>
    </dict>
    <dict>
        <key>Type</key>
        <string>PSMultiValueSpecifier</string>
        <key>Title</key>
        <string>Friday</string>
        <key>Key</key>
        <string>WorkingHoursFriday</string>
        <key>DefaultValue</key>
        <integer>28800</integer>
        <key>Titles</key>
        <array>
            <integer>Free</integer>
            <integer>8 Hours</integer>
            ...
        </array>
    </dict>
    <dict>
        <key>Type</key>
        <string>PSMultiValueSpecifier</string>
        <key>Title</key>
        <string>Saturday</string>
        <key>Key</key>
        <string>WorkingHoursSaturday</string>
        <key>DefaultValue</key>
        <integer>28800</integer>
        <key>Titles</key>
        <array>
            <string>Free</string>
            <string>8 Hours</string>
            ...
        </array>
        <key>Values</key>
        <array>
            <integer>0</integer>
            <integer>28800</integer>
            ...
        </array>
    </dict>

这是设置应用的屏幕截图。 WorkingHoursSaturday 设置为 0,但设置表仍显示 8 小时:

我错过了什么?

编辑:在代码中设置 WorkingHoursSaturday 后,通过调用 [defaults setInteger:0 forKey:@"WorkingHoursSaturday"];,Settings.app 会显示正确的值。也许对registerDefaults 的调用不正确?

【问题讨论】:

    标签: ios nsuserdefaults settings.bundle


    【解决方案1】:

    您忽略的是registerDefaults 确实向您应用的用户默认数据库写入任何内容。它仅在运行时充当覆盖,直到有人明确将值写入用户默认值。

    “设置”应用使用您在 Settings.bundle 中设置的默认值,除非它在用户默认值中找到不同的值。

    换句话说,您的 Defaults.plist 和 Settings.Bundle 中的默认值应该始终匹配。

    【讨论】:

    • 糟糕,他们没有。我以为我检查了三次!谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多