如何测试NSCFBoolean值?

Tom*_*m H 34 objective-c

从JSON接收数据,看起来像:

{
    myself = 1;
    "id" = 123;
}
Run Code Online (Sandbox Code Playgroud)

我把它放到NSDictionary*messageDic中,我还定义了一个值*isMyself来接收我自己的值

Boolean isMyself = [messageDic objectForKey:@"myself"];
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

所以我打印日期类型,

const char* className = class_getName([[messageDic objectForKey:@"myself"] class]);
NSLog(@"yourObject is a: %s", className);
NSLog(@"Size of BOOL %d", sizeof(isMyself));
NSLog(@"Size of BOOL %@", [messageDic objectForKey:@"myself"]);
Run Code Online (Sandbox Code Playgroud)

结果是:

2012-08-01 17:41:48.886  yourObject is a: __NSCFBoolean
2012-08-01 17:41:48.887  Size of BOOL 1
2012-08-01 17:41:48.887  Size of BOOL 0
Run Code Online (Sandbox Code Playgroud)

并且下面的if部分也不起作用.

if ([messageDic objectForKey:@"myself"] == 0)
Run Code Online (Sandbox Code Playgroud)

我试过了

NSCFBoolean *isMyself = [messageDic objectForKey:@"myself"];
Run Code Online (Sandbox Code Playgroud)

我上面有错误表格.

我的问题是我该怎么做来测试它的价值[messageDic objectForKey:@"myself"]?什么是__NSCFBoolean

谢谢!

小智 68

你从[messageDic objectForKey:@"我自己"]得到的结果,这是一个NSNumber,那么你需要将结果转换为Bool.所以尝试下面:

if ([[messageDic objectForKey:@"myself"]boolValue] == NO)
Run Code Online (Sandbox Code Playgroud)

  • 正如@DavidH所说,在BOOL上使用"== NO"是危险的 (2认同)

Vla*_*mir 32

__NSCFBoolean是NSNumber 类集群中使用的私有类.要从中提取适当的值,您需要使用NSNumber类-boolValue中的方法,在您的情况下:

BOOL isMyself = [[messageDic objectForKey:@"myself"] boolValue];
Run Code Online (Sandbox Code Playgroud)