NSUserDefaults boolforKey limitation by design?

NP Compete picture NP Compete · Dec 10, 2010 · Viewed 8k times · Source

The NSUserDefaults API documentation has the boolForKey: message which is described like this -

boolForKey:

Returns the Boolean value associated with the specified key.

- (BOOL)boolForKey:(NSString *)defaultName

Return Value If a boolean value is associated with defaultName in the user defaults, that value is returned. Otherwise, NO is returned.

Given that a [[NSUserDefaults standardUserDefaults] boolForKey:@"some_Key"] gives back a NO it can be either because the key does not exist or the key exists and has a boolean value NO. How can we differentiate? As of now, I can only avoid getting into this situation in the first place.

Answer

Ole Begemann picture Ole Begemann · Dec 10, 2010

You are using the user defaults incorrectly. At the launch of your app, you are supposed to call -[NSUserDefaults registerDefaults:] with a dictionary that contains the default values for all preferences.

Then, if the user has not set a preference, -boolForKey will return the default value.