从id中查找objectType

时间:2012-10-20 10:49:30

标签: iphone objective-c ios

我没有得到布尔类型?

这是我的代码,我做错了什么?

id val = [ dict objectForKey:key ];

if ([ val isKindOfClass:[ NSString class ] ] )
   print "string";
else if( [ val  isKindOfClass:[ NSNumber class ] ] )
   print "number";
else if( [ val  isKindOfClass:[ BOOL class ] ] )
   print "bool";

没有得到布尔类型。

2 个答案:

答案 0 :(得分:1)

您无法直接在BOOL中保存NSDictionary值,因为它不是对象。首先,您需要在NSNumber中更改它,然后将其保存在NSDictionary中,然后比较isKindOfClass:[NSNumber Class],而不是比较[BOOL class]

实施例: -

BOOL value = YES;
NSDictionary *dict = [[NSDictionary alloc]initWithObjectsAndKeys:[NSNumber numberWithBool:value],@"Bool", nil];

id val = [dict valueForKey:@"Bool"];
if([val isKindOfClass:[NSNumber class]])
{
    //NSNumber Class
}

修改

您无法直接将BOOL值转换为NSString。如果您想要BOOL格式的NSString值,则必须制作自己的方法。以下是使用macro的一个小例子。

定义此macro哪个类要将BOOL值转换为NSString

#define NSStringFromBOOL(aBOOL) aBOOL? @"YES" : @"NO"

然后简单地调用它 -

NSString *bool_string = NSStringFromBOOL(YES);
NSLog(@"%@",bool_string);

它将打印YES而不是'1'。

答案 1 :(得分:0)

BOOL不是类,也不是Objective-C对象类型。它是一个标量,由C基元类型(signed char)定义。你不能这样使用它。