2012-02-25 6 views
0

NSString으로 구문 분석 된 개체가 있고 클래스 이름을 추적하면 NCDecimalNumber이 표시됩니다. 왜? (나는 NSString이 클러스터 인 것을 이해하지만 여전히 NSDecimalNumber이 클러스터 뒤에있는 부분이 될 이유를 모르겠다)NSString에서 NSDecimalNumber가 필요한 이유는 무엇입니까?

다음 게시물은 비슷한 질문을하지만 아무도 그 이유를 묻지 않습니다. 이것을 사용하는 Converting NSDecimalNumber to NSString

+3

당신이 상황을 재현하는 코드가 있습니까? – Monolo

+0

값이있는 JSON을 구문 분석 할 때이 코드를 복제 할 수 있습니다. 그리고 내가 얻은 오브젝트는 위에 나열된 포스트 링크와 비슷합니다. 그 다음에 (objectForKey를 통해) 값에 접근하여 NSString에 저장하면 (예 : 변수 이름 "value"라고하면 [value class]를 추적하면 NSDecimalNumber가됩니다. – Boon

답변

2

디코더가 숫자를 NSDecimalNumber (및 NSString으로 문자열)으로 디코딩하는 것처럼 들립니다.

Objective-C C이므로 포인터에 효과적으로 할당 할 수 있으므로 유형이 일치하는지 확인하는 것은 사용자의 책임입니다. 그렇기 때문에 유형으로 선언 된 포인터에 NSNumber 유형의 객체를 할당 할 수 있습니다. 보시다시피, 클래스 클러스터는 이와 관련이 없습니다.

개체를 변수에 할당하기 전에 클래스를 확인하거나 개체를 id (모든 개체를 저장할 수 있음) 유형의 포인터에 할당해야합니다.

당신이 자신의 유형에 따라 개체에 대한 작업을해야하는 경우

, 당신은 이런 식으로 뭔가를 할 수 :

id obj = //... 

if ([obj isKindOfClass: [NSString class]]) { 

} 
else if ([obj isKindOfClass: [NSNumber class]]) { 

} 
else { 

} 
2

보십시오 : 당신을 도울 것입니다

NSString *string = [[NSStrig alloc] initWithFormat:@"%@", [DecimalNumber stringValue]]; 

희망.

관련 문제