How to set initial values for NSUserDefault Keys?
You should use the registerDefaults
method of NSUserDefaults
. Prepare a plist file in your bundle that contains the default preferences and then use that plist to register the defaults.
NSString *defaultPrefsFile = [[NSBundle mainBundle] pathForResource:@"defaultPrefs" ofType:@"plist"];NSDictionary *defaultPreferences = [NSDictionary dictionaryWithContentsOfFile:defaultPrefsFile];[[NSUserDefaults standardUserDefaults] registerDefaults:defaultPreferences];
You have to execute this code on every launch of your app. It will add these values to a separate domain in the user defaults hierarchy. Whenever your app's user defaults don't provide a value for a certain key, NSUserDefaults
will fall back to this domain and retrieve the value from there.
If you have many default values, let use ola's answer, otherwise this is good for a few params
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];if (![defaults boolForKey:USERDEFAULT_IS_INITIALIZED]) { [defaults setBool:YES forKey:USERDEFAULT_IS_INITIALIZED]; // Set initial values ... [defaults synchronize];}
if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"initialValuesHaveBeenWritten"]){ [[NSUserDefaults standardUserDefaults] setValue:obj1 forKey:key1]; [[NSUserDefaults standardUserDefaults] setValue:obj2 forKey:key2]; [[NSUserDefaults standardUserDefaults] setValue:obj1 forKey:@"initialValuesHaveBeenWritten"]; [[NSUserDefaults standardUserDefaults] synchronize];}
NB: Not tested, done from memory