如何转换和比较NSNumber和BOOL?

时间:2010-03-19 16:41:29

标签: iphone objective-c

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

  1. 如何从NSNumber转换回BOOL?
  2. 如何比较NSNumber与BOOL值。
  3. 目前我有:

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

    更好的比较方法?

    谢谢!

4 个答案:

答案 0 :(得分:136)

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

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

要从NSNumber使用-(BOOL)boolValue获取bool值:

BOOL b = [num boolValue];

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

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

答案 1 :(得分:1)

NSUserDefaults有两种透明操作布尔值的方法:

- (BOOL)boolForKey:(NSString *)defaultName

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

答案 2 :(得分:0)

我设法从其NSNumber (doh!)中设法NSConcreteValue的“booleanity”的唯一方法是使用以下内容...

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

其他所有技巧...... 失败。买家要小心,这不是万无一失的(__NSCFNumber可能是平台/机器特定的 - 它只是Apple的实施细节)......但正如他们所说的那样.. 没有别的成功了!

答案 3 :(得分:0)

快捷键4:

.page {display: none;}
.page.* {display: block;}

enter image description here