2012-12-12 2 views
3

설정 :클래스 클러스터에서 "최상위"클래스의 이름을 얻는 방법은 무엇입니까?

데이터가 JSON을 통해 수신됩니다.

NSJSONSerialization을 사용하여 JSON을 객체로 변환합니다.

JSON에서 숫자 값이 여러 가지 가능한 클래스 유형으로 오브젝티브 C로 제공 :

(NSNumber, NSDecimalNumber or __NSCFNumber) - 그 모든 NSNumber에서 클래스 클러스터에 있습니다.


문제 :

1) I 클래스 클러스터 "우산"클래스 얻을 수있는 방법이 필요 - 내가 유형 NSNumber, NSDecimalNumber or __NSCFNumber의 값을 가질 때, NSNumber을.

문자열과 동일합니다. 나는를 얻는 방법이 필요합니다. NSString, NSMutableString, __NSCFString, __NSCFConstantString.

2) 예를 들어 NSString 클러스터의 모든 클래스 목록을 코드로 가져올 수도 있습니다. 그런 다음 런타임에 목록을 동적으로 빌드하고 완료되었는지 확인하십시오. 내가 지금까지 무엇을 가지고


:

지금까지 나는 그것을 할 수있는 온건 한 방법을 마련 할 수 없었다. 따라서 허용 된 유형의 목록이 있지만 완벽하지는 않을지 모르지만 가장 좋은 해결책 인 것처럼 느껴지지 않습니다.

코드 : https://github.com/icanzilb/JSONModel/blob/master/JSONModel/JSONModel.m#L45

+0

또한 'NSCFBoolean'은 NSNumber의 하위 클래스입니다. –

답변

2

이 작업을 수행 할 수 있습니다

id object = // obtain the object somehow 

Class cls = Nil; // for now 

// property list types, roughly equivalent to JSON's fundamental types 
NSArray *classes = @[[NSString class], [NSNumber class], [NSArray class], [NSDictionary class], [NSData class], [NSDate class]]; 

Class c; 
for (c in classes) { 
    if ([object isKintOfClass:c]) { 
     cls = c; 
     break; 
    } 
} 

당신은 classes 배열에 다른 클래스를 추가하여 목록을 확장 할 수 있습니다. 결국 clsobject이 인스턴스 인 클래스 클러스터를 포함하거나 둘 중 하나의 인스턴스가 아닌 경우 Nil을 포함하게됩니다.

+0

이것은 Core Foundation 클래스에서 작동합니다. 밖에있는 클래스 클러스터가있을 수 있습니다. – Berik

+0

@Berik 나는 이것이 보편적이라고 암시하지 않았고, OP의 문제도 그렇게 할 필요가 없었다. –

관련 문제