I have an iOS application with a settings.bundle that handles various settings for my application with Switch toggle
. I set default values in my root.plist file (using the DefaultValue property) to YES
but any time the application launches on a device or the iOS simulator all values go NO
. It worked well only on the first launch.
I am retrieving the defaults with this code (am I doing something wrong here?):
NSUserDefaults *localeDefaults = [NSUserDefaults standardUserDefaults];
BOOL ENWORDS = [localeDefaults boolForKey:@"localetime"];
The Default Value is used by Settings.app for display purposes only. If you don't change the value in the settings app nothing is saved to NSUserDefaults.
You have to register the default values yourself. Use something like this in
application:didFinishLaunchingWithOptions:
:The problem is the type of
default Value
must beboolean
notstring
;) delete this value and add a anotherdefault Value
property again hope this helpsYou can check whether the value has been set by getting objectForKey and checking whether it is nil.
This blog post might help : http://greghaygood.com/2009/03/09/updating-nsuserdefaults-from-settingsbundle
tl;dr - until the user opens the settings page then the defaults aren't copied into your app. This is the expected behavior by Apple.
Personally, I think this is terrible. It means that you will have to set your defaults in code just in case the user starts your app without going to the settings page first (which will be true for about 99% of use cases!)