2012-10-20 50 views
0

我沒有得到布爾類型?找到objectType從編號

這是我的代碼,我做錯了什麼?

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

現在閱讀C教程。 – 2012-10-20 10:53:35

+0

你不能將BOOL存儲在NSDictionary中。請參閱文檔。 (當你解析一個JSON時,布爾值將被存儲爲NSIntegers 0和1.) – ilmiacs

+0

此外,你的打印語句是不好的。 – ilmiacs

回答

0

BOOL不是類也不是Objective-C對象類型。它是一個標量,類型從C原始類型中剝離(signed char)。你不能像這樣使用它。

1

您不能直接保存BOOLNSDictionary,因爲它不是一個對象。所以首先你必須改變它在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直接。如果你想NSString格式的BOOL值,你將不得不做出自己的方法。這是一個使用macro的小例子。

定義此macro您想要將BOOL值投射到NSString的哪個類。

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

然後,只需調用這個 -

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

它將打印YES,而不是 '1'。

+0

嘿我想要設置布爾值爲是/否格式不在0和1,我有字符串,數字和布爾值,所以我怎麼能做到這一點。 – user1761344

+0

@ user1761344 - 查看我編輯的答案。 – TheTiger