问题
Is there a way I can check to see if a value is NULL/Nil before assigning it to a BOOL?
For example, I have a value in a NSDictionary that can be either TRUE/FALSE/NULL
mySTUser.current_user_following = [[results objectForKey:@"current_user_following"]boolValue];
When the value is NULL I get the following error
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSNull boolValue]: unrecognized selector sent to instance
I would like to be able to handle the NULL case.
回答1:
You should check for [NSNull null]:
id vUser = [results objectForKey:@"current_user_following"];
if (vUser != [NSNull null]) {
// do stuff...
}
else {
// handle the case appropriately...
}
回答2:
You can test first and assign then conditionally, e.g. something like the following:
if (NSValue* val = [results objectForKey:@"current_user_following"]) {
mySTUser.current_user_following = [val boolValue];
}
This:
- avoids calling
objectForKey:twice by storing the result in a variable - limits the scope of the variable to the
ifstatement - works because
nilis is equivalent to 0 - thus only executes the assignment statement if
valis notnil
To additionally check for the value being NSNull you'd have to add another test as given by ChristopheD, but i question wether NSNull is really needed here - YES/NO should be sufficient for a description like "is following".
If you have no useful value for a key, you could simply remove it from the dictionary or not insert it in the first place.
来源:https://stackoverflow.com/questions/2760112/how-to-check-if-a-bool-is-null