【问题标题】:iPhone settings not honourediPhone 设置不支持
【发布时间】:2010-05-16 12:20:28
【问题描述】:

我的 iPhone 应用程序有以下问题:刚安装时,当我使用以下代码读出我的“播放声音”首选项时:

defaults = [NSUserDefaults standardUserDefaults];
NSLog(@"Play Sounds? %d", [defaults boolForKey:@"play_sounds_preference"]);

即使默认设置为 true,该设置也始终显示为 false。有任何想法吗?这是我的 Root.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>StringsTable</key>
    <string>Root</string>
    <key>PreferenceSpecifiers</key>
    <array>
        <dict>
            <key>Type</key>
            <string>PSGroupSpecifier</string>
            <key>Title</key>
                <string>General Settings</string>
            </dict>
            <dict>
                <key>Type</key>
                    <string>PSToggleSwitchSpecifier</string>
                    <key>Title</key>
                    <string>Sounds</string>
                    <key>Key</key>
                    <string>play_sounds_preference</string>
                    <key>DefaultValue</key>
                    <true/>
            </dict>
    </array>
</dict>
</plist>

当用户打开 Settings.app 并导航到我的应用名称时,即使用户没有更改任何内容,该设置也会显示为 true。

【问题讨论】:

    标签: iphone nsuserdefaults


    【解决方案1】:

    不幸的是,只有在用户打开设置应用程序时才会设置默认设置。

    您可以在启动应用程序时简单地检查密钥是否存在,如果不存在则设置默认值:

    if (![[NSUserDefaults standardUserDefaults] objectForKey:@"theKey"]){
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"theKey"];
    }
    

    或者,如果你有很多key需要设置,你可以看看NSUserDefault的registerDefaults。

    【讨论】:

    • 在另一个 SO question 中有一段非常好的代码,通过根据您的 Root.plist 初始化默认值来帮助解决这个问题。这很棒,因为您不必在两个地方设置默认值。见:stackoverflow.com/questions/510216/…
    猜你喜欢
    • 1970-01-01
    • 2014-04-07
    • 2013-08-17
    • 2012-08-18
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多