2012-04-20 4 views
1

이것은 아마도 내 편에서는 오류입니다. 그러나 이것이 키 경로로 식별 된 속성의 유형 인 int를 반환하지 않는 이유는 조금 혼란 스럽습니다. valueForKeyPath : 대신 객체를 반환합니다. 아무나 설명 할 수 있습니다.valueForKeyPath에서 반환 유형 :?

// Simple Object 
@interface Hopper : NSObject 
@property(nonatomic, assign) int mass; 
@end 

// Test 
Hopper *hopper = [[Hopper alloc] init]; 
[hopper setMass:67]; 
NSLog(@"HOPPER: %d", [hopper valueForKeyPath:@"mass"]); 

.

WARNING: Conversion specifies type 'int' but the argument has type 'id' 
+0

호퍼 호퍼 * = [ALLOC] INIT]을; Hopper * 호퍼 = [[Hopper alloc] init]이어야합니다. – CarlJ

+0

감사합니다. meccan, 제 실수는 Xcode에서 붙여 넣었어야했는데 그냥 여기에 신선한 코드를 입력해야했습니다. 나는 그 질문을 갱신했다. – fuzzygoat

답변

3

업데이트 답을 읽어 보지 않았 objc 개체 (예 : NSNumberNSValue)는 Accessor Search Patterns for Simple Attributes에 있습니다.

따라서 objc 객체 형식 지정자 %@ 사용할 것이다 :

NSLog(@"HOPPER: %@", [hopper valueForKeyPath:@"mass"]); 
+1

감사합니다 저스틴, 많이 감사하겠습니다. – fuzzygoat

+0

@fuzzygoat 오신 것을 환영합니다. – justin

+0

좋습니다 ... +1 – Diziet

2

valueForKeyPath는 개체를 반환합니다. int 및 char 유형은 객체가 아닙니다. 를 통해 부동산에 액세스하십시오. 연산자 또는 유사한.

NSLog(@"HOPPER: %d", [hopper mass]); 

NSLog(@"HOPPER: %d", hopper.mass); 

편집 : 비-objc 객체의 자동 변환을위한

- (id)valueForKeyPath:(NSString *)keyPath; 

세부 사항 : 완전 예제 코드, 예, 그것이 objc 객체를 반환

+0

docs가 "반환 값 keyPath에 의해 식별 된 파생 된 속성에 대한 값"이라고 말했기 때문에 그 모든 것이 명확하지 않습니다. " un-initated는 none 객체가 될 수 있습니다. – fuzzygoat

+0

나는 내 대답을 조금 업데이트했다 .... 나는 당신의 코드를 완전히 읽지 못했다. – Diziet

+0

그것은 - (id)가 말한 것을 말합니다. – fuzzygoat