2012-10-20 2 views
0

부울 유형이 표시되지 않습니까?id에서 객체 유형을 찾으십시오

여기 내 코드는 무엇입니까?

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 자습서를 읽으십시오. –

+0

BOOL을 NSDictionary에 저장할 수 없습니다. docs를 참조하십시오. (JSON을 구문 분석 할 때 부울 값은 NSInteger 0과 1로 저장됩니다.) – ilmiacs

+0

게다가 인쇄 명령문이 잘못되었습니다. – ilmiacs

답변

0

BOOL은 클래스도 Objective-C 개체 유형도 아닙니다. 그것은 C 원시 타입 (signed char)에서 typedeffed 스칼라입니다. 이런 식으로는 사용할 수 없습니다.

1

값을 객체가 아니기 때문에 NSDictionary에 직접 저장할 수 없습니다. 먼저 NSNumber에서 변경하고 NSDictionary에 저장 한 다음 [BOOL class]을 비교하는 대신 isKindOfClass:[NSNumber 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 
} 

편집 :

직접 NSStringBOOL 값을 캐스팅하지 못할. BOOL 값을 NSString 형식으로 지정하려면 고유 한 방법을 만들어야합니다. 여기에 macro을 사용하는 작은 예가 있습니다.

BOOL 값을 NSString으로 캐스팅하려는 클래스에서이 macro을 정의하십시오.

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

그런 다음 단순히이 전화 - 대신 '1'의 YES을 인쇄합니다

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

.

+0

이봐, 나는 0과 1이 아닌 Yes/No 형식으로 부울 값을 설정하고 싶습니다. 문자열, 숫자 및 부울 값을 가지고 있으므로 어떻게 할 수 있습니까? – user1761344

+0

@ user1761344 - 내 수정 된 답변보기 – TheTiger

관련 문제