2010-05-16 7 views
1

Mon iPhone app a le problème suivant: Fraîchement installé, quand je lis mon « Play Sound » de préférence avec le code suivant:réglages de l'iPhone pas honoré

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

Le réglage se lit toujours comme faux, même si le paramètre par défaut est défini sur true. Des idées? Voici mon 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> 

Lorsque l'utilisateur ouvre la Settings.app et navigue au nom de mon application, le réglage se lit comme vrai, même si l'utilisateur ne change rien.

Répondre

4

Le paramètre par défaut n'est défini que lorsque l'utilisateur ouvre l'application Paramètres, malheureusement.

Vous pouvez simplement vérifier que la clé existe lorsque vous démarrez l'application, et définir la valeur par défaut si elle ne fonctionne pas:

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

Ou, si vous avez beaucoup de clés qui ont besoin de réglage, vous pouvez regardez les paramètres de registre de NSUserDefault.

+0

génial. Merci. – winsmith

+1

Il ya un très bon morceau de code dans une autre question SO qui aide à cela en initialisant les valeurs par défaut en fonction de votre Root.plist. C'est super parce que vous n'avez pas à définir les valeurs par défaut à deux endroits. Voir: http://stackoverflow.com/questions/510216/can-you-make-the-settings-in-settings-bundle-default-even-if-you-dont-open-the-s – progrmr

+0

Ooh, c'est agréable! –