如何转换和比较NSNumber BOOL?
首先,我将BOOL值转换为NSNumber,以便将其放入NSUserDefaults中。 后来我想从NSUserDefaults中检索BOOL值,但显然我得到了NSNumber而不是BOOL。 我的问题是?
- 如何从NSNumber转换回BOOL?
- 如何比较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
可能是平台/机器的具体情况 – 这完全是苹果公司的实施细节 )…但是正如他们所说… 没有其他工作!