NP Compete
NP Compete

Reputation: 2379

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.

Upvotes: 19

Views: 8131

Answers (2)

Ole Begemann
Ole Begemann

Reputation: 135578

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.

Upvotes: 33

Mike Abdullah
Mike Abdullah

Reputation: 15013

Use the -objectForKey: method as well. This will tell you whether the key exists.

Upvotes: 29

Related Questions