Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 812
NP Compete Avatar asked Dec 10 '10 08:12

NP Compete


2 Answers

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.

like image 127
Ole Begemann Avatar answered Oct 17 '22 10:10

Ole Begemann


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

like image 41
Mike Abdullah Avatar answered Oct 17 '22 10:10

Mike Abdullah