2012-01-19 1 views
2

iOS 앱에서 특정 기능을 호출하면 id 데이터 유형이 반환됩니다. 나는이 함수를 볼 수 없기 때문에 그것이 무엇을하는지 또는 리턴 타입이 실제로 무엇인지 알지 못한다.iOS (id) 개체의 구조를 결정하는 방법은 무엇입니까?

NSLog("@"...)을 사용하여 콘솔에 인쇄하면 2012-01-18 19:03:08.915 HelloWorld[165:707] Key Press State과 비슷한 문자열이 표시됩니다.

이 기본 Id 객체의 구조를 결정할 방법이 있습니까? "Key press state"과 같은 응답의 특정 부분을 가져 오는 방법은 무엇입니까? 문자열 구문 분석은 끔찍한 생각처럼 보이지만 어쩌면 그것이 유일한 방법 일 것입니다. 아마도 데이터는 실제로는 NSString일까요?

감사합니다.

답변

16

이 시도 :

NSLog(@"Mystery object is a %@", NSStringFromClass([mysteryObject class])); 
+0

좋은 생각을. 그래서 이것은 데이터 유형이 __NSCFNumber라는 것을 알려줍니다. 이것을 테이블 셀에 삽입하려고하면 셀에 ASCII가 아닌 문자가 생깁니다. 이 문자를 ASCII (UTF8?)로 변환하기 위해 수행해야하는 특정 변환이 있습니까 – Jonathan

+0

'__NSCFNumber'는 NSNumber의 개인 구현 클래스입니다. '-stringValue'를 사용하여 텍스트로 가져올 수 있습니다. –

2

<objc/runtime.h>을 보면 개체의 클래스, 메서드 선택기, ivars 등에 대한 쿼리를 볼 수 있습니다. 그러나 일반적으로 캡슐화가 끊어지기 때문에 일반적으로 그렇게하지 않으려 고합니다. 앞으로 변경 될 수있는 구현 세부 사항에 의존하므로주의해야합니다. 자세한 내용은 here을 참조하십시오.