39

从 JSON 接收到的数据,如下所示:

{
    myself = 1;
    "id" = 123;
}

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

Boolean isMyself = [messageDic objectForKey:@"myself"];

但它不起作用。

所以我打印日期类型,

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"]);

结果是:

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

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

if ([messageDic objectForKey:@"myself"] == 0)

我试过了

NSCFBoolean *isMyself = [messageDic objectForKey:@"myself"];

我得到了上面的错误表格。

我的问题是我应该怎么做才能测试 的值[messageDic objectForKey:@"myself"]?什么是__NSCFBoolean

谢谢!

4

2 回答 2

73

您从 [messageDic objectForKey:@"myself"] 得到的结果是一个 NSNumber,那么您需要将结果转换为 Bool。所以试试下面:

if ([[messageDic objectForKey:@"myself"]boolValue] == NO)
于 2012-08-01T13:04:54.183 回答
35

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

BOOL isMyself = [[messageDic objectForKey:@"myself"] boolValue];
于 2012-08-01T10:07:47.907 回答