2010-11-19 4 views
3

iOS에서 일반적인 '속성/키 편집기'보기 클래스를 작성하고 있는데, 예를 들어 [objectForKey isKindOfClass:[NSDate class]]을 사용하여 편집 키의 유형을 확인합니다. objectForKeynil 인 경우 실패 할 것이라는 것을 깨달았을 때 방금 벽을 만났습니다. 해당 속성이 nil이라도 일반 Objective-C 속성에 대한 클래스/반환 형식을 얻을 수있는 방법이 있습니까? 나는 Objective-C 런타임에서 method_getReturnType에 대해 알고 있지만, 내가 필요로하는 것은 과도한 소리처럼 들린다.Objective C에서 메서드의 반환 유형을 얻는 방법은 무엇입니까?

답변

3

수 없습니다. 메서드에 대한 반환 형식 정보를 사용할 수 있지만 개체를 ​​반환하는 메서드의 반환 형식 인코딩은 단순히 "개체 참조"를 의미하는 @입니다.

0

먼저 objectForKey! = nil인지 확인하고 isKindOfClass 검사를 계속할 수 있습니까? 객체가 nil과 같지 않은지 확인하면 오류없이 쉽게 확인하거나 안전하게 종료 할 수 있습니다.

+0

매우 사실이며, 여기에 해결책이 없다면 장기적으로해야 할 일이 있습니다.하지만 사용자가없는 곳에서 개체를 만들 수 있기를 바랍니다. 예를 들어,이 경우 데이터보고 시스템을 구축하고 처음에는 시작일과 종료일을 nil로 설정 했으므로 [NSDate date]로 쉽게 수정할 수 있지만 여전히 유연성을 원합니다. – refulgentis

+0

언제! = nil해도 아무 것도 할 수 없게 될지 모르겠습니다. 당신이 어떤 종류의 수퍼 리플렉션을하려고하지 않는 한, 그것들에 대한 잘못된 언어 인 –

0

나는 데이터의 출처 모르겠지만, 당신은 NSNull 무기 호를 대신하고 고려하는 것이 좋습니다 그리고 당신이 기술적으로 널 무언가에 NSObject의 같은 특성을 얻을 수

하지만 널 (null) 수표는 엉덩이에 더 많은 고통이된다.

그것은 개체에서 간다!

(NSNull *) 객체 = 0! = [NSNull 널]

+0

'[NSNull null]'은'nil 그렇지. –

+0

체크를 많이해야한다면, 항상 손쉬운 카테고리를 사용할 수 있습니다 : https://gist.github.com/707337 – mipadi

+0

@peter하지만 적어도 그는 할 수있을 것입니다 .KindOfClass ... 나는 의미합니다. ... 나는 산들 바람을 여기에서 쏘고있다.나는 그가 누구에 대해 이야기하고 있는지를 아무도 모를 것이다. –

2

당신이 이해가되지 않습니다 요구하고 있습니다.

이름만으로는 메서드를 식별하지 않는다는 것을 기억하십시오. 객체는 이러한 메시지에 응답합니다 (또는 응답하지 않습니다). 메서드는 객체 (또는 클래스)의 일부로 만 단독으로 존재하지 않습니다.

개체가 없으면 개체에 메시지를 보내는 것이 반환된다는 사실을 알 수 없습니다.

ETA : 속성의 속성을 편집하기 위해 개체를 편집 할 수는 없지만 어떻게 편집 할 수 있습니까? 다른 곳에 버그가있는 것 같습니다.

나는 Objective-C 런타임에서 약 method_getReturnType을 알고 있지만, 내가 필요로하는 것이 과잉이라고 생각합니다.

두 가지 방법이 있습니다. 비정형 속성 (@property 선언이없는 KVC 호환 접근 자 메서드)을 지원하려는 경우 정확히 필요한 것입니다. 정식 속성 (@property) 만 신경 쓰는 경우 the property_getAttributes function을 사용하십시오.

+0

그는 검사 대상 개체가 0이 아니라는 것을 말하지 않고 있지만 속성 값은 0입니다. –

+0

Ahruman : 다시 질문을 읽고, 나는 당신이 옳다고 생각합니다. –

+0

아루만이 맞습니다. – refulgentis

관련 문제