【问题标题】:NSArray and bool valuesNSArray 和布尔值
【发布时间】:2011-04-15 17:38:23
【问题描述】:

NSArray 可以保存一个布尔值数组吗?

以下代码运行

BOOL b = NO;
NSMutableArray *array = [[NSMutableArray alloc] init];

[array addObject:[NSNumber numberWithBool:b]];

NSLog(@"value is %d", [array objectAtIndex:0] );

但是,我没有得到预期的 NO 值 0。相反,这就是我得到的

值为 37736096

【问题讨论】:

    标签: objective-c arrays cocoa-touch nsarray boolean


    【解决方案1】:

    是的,只需将布尔值包装在 NSNumber 中:

    BOOL b = YES;
    
    [array addObject:[NSNumber numberWithBool:b]];
    

    如果要检索布尔值,请使用:

    BOOL b = [[array objectAtIndex:i] boolValue]; 
    // only if you know for sure it contains a boolean
    

    【讨论】:

    • 你能解释一下为什么 bool NO 会变成一个大数字吗?那是随机值吗?谢谢。
    • 那是 NSNumber 对象的地址,而不是它的内容。这是因为你忘记调用 -boolValue
    【解决方案2】:

    要完成 Philippe 的回答,您应该使用 XCode 4.4 中引入的随 Apple LLVM 编译器版本 4.0 发布的文字字符串。

    您的代码将如下所示:

    NSMutableArray *array = [[NSMutableArray alloc] init];
    
    array[0] = @YES;
    
    //Value is 1
    NSLog(@"Value is %d:", [array[0]  boolValue]);
    

    【讨论】:

    • ...输出应该是什么?
    • %d 会将输出格式化为数字,因此您将看到“值为 1”
    猜你喜欢
    • 2013-02-17
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 2013-11-04
    • 2013-11-24
    • 2014-12-13
    相关资源
    最近更新 更多