cocoa-touchfoundation

NSUserDefaults boolforKey limitation by design?


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.


Solution

  • 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.