如何转换和比较NSNumber BOOL?

首先,我将BOOL值转换为NSNumber,以便将其放入NSUserDefaults中。 后来我想从NSUserDefaults中检索BOOL值,但显然我得到了NSNumber而不是BOOL。 我的问题是?

  1. 如何从NSNumber转换回BOOL?
  2. 如何比较NSNumber和BOOL值。

目前我有:

if (someNSNumberValue == [NSNumber numberWithBool:NO]) { do something } 

有什么更好的方法来比较?

谢谢!

你目前比较两个指针。 使用NSNumber的方法来实际比较两者:

 if([someNSNumberValue isEqualToNumber:[NSNumber numberWithBool:NO]]) { // ... } 

要从NSNumber获取布尔值,使用-(BOOL)boolValue

 BOOL b = [num boolValue]; 

通过这种方式比较会更容易阅读我的方式:

 if([num boolValue] == NO) { // ... } 

NSUserDefaults有两种方法可以用布尔值来透明地操作:

- (BOOL)boolForKey:(NSString *)defaultName

- (void)setBool:(BOOL)value forKey:(NSString *)defaultName

唯一的办法,我设法从NSConcreteValue (doh!) fnagle NSNumber的“布尔型”与以下…

 id x = [self valueForKey:@"aBoolMaybe"]; if ([x respondsToSelector:@selector(boolValue)] && [x isKindOfClass:objc_getClass("__NSCFNumber")]) [self doSomethingThatExpectsABool:[x boolValue]]; 

其他每个技巧… 失败 。 买家当心,这不是万无一失的( __NSCFNumber可能是平台/机器的具体情况 – 这完全是苹果公司的实施细节 )…但是正如他们所说… 没有其他工作!