2009-03-30 2 views
1

Objective C & Cocoa를 배우려고하는데 Object 내부의 속성에 액세스 할 수 없습니다. 특히 C 메소드의 객체. 나는 다람쥐 다이나믹 라이브러리를 가지고 일하고 있습니다.Cocoa에서 C 메소드의 속성에 액세스하기

Chipmunk에는 cpVect라는 NSPoint와 비슷한 것이 있습니다. 지금은 내 객체 내부 cpVect을 정의 아무 문제가 없지만, 내가 @property & @synthesize를 사용하여 접근을 할 때 나는 점점 오류를 계속 그래서

@interface ControlsLayer : Layer { 
    Sprite * touchMarker, *dragMarker; 
    cpVect * forceVector; 
} 

잘 작동

하지만

@interface ControlsLayer : Layer { 
    Sprite * touchMarker, *dragMarker; 
    cpVect * forceVector; 
} 

@property (retain) cpVect forceVector; 

@end 

그래서 내가 다른 오류가 '유지'없이 나에게 오류 "property 'forceVector' with 'retain' must be of object type"

을 제공

"type of property 'forceVector' does not match type of ivar 'forceVector'" 

저는 이것을 알아 내려고 노력하고 있습니다. 사용할 수있는 특정 유형이 있습니까, 아니면 다람쥐와 코코아 사이의 비 호환성인지 ... 아니면 ...하지 않습니까? 알고있다. Chipmunk는 문서에 매우 가벼워서 내가 찾은 모든 예제는 객체를 사용하지 않는 것처럼 보입니다. 모든 예제는 모든 것을 처리하기 위해 하나의 클래스를 사용합니다.

도움을 주시면 대단히 감사하겠습니다. 이 일로 나는 너트를 몰고있다.

답변

4

retain (즉, 레퍼런스 카운트 된 메모리 관리, 새로운 값에 대한 참조 개수를 증가시키고 이전 값의 참조 개수를 감소시키는 의미론)의 의미가 Objective- C 개체. 속성의 기본 의미는 retain,하지만 당신은 속성이 assign과 같이되도록 지정할 수 있습니다 :

@property (assign) cpVect *forceVector; 

는 어디 속성이 실제로 cpVect*하지 당신이 쓴 같은 cpVect 있다고 가정합니다.

+0

이 답변이 정확하지만, WRT는 원래의 코드는, 아마 포인터로하지 바르를 변경하려면 더 의미 :

이보십시오. 공용 변수에 대한 포인터를 인스턴스 변수로 갖는 것은 매우 드뭅니다. – Chuck

2

인스턴스 변수에 cpVect에 대한 포인터가 있지만 속성에는 없습니다.

@property (assign) cpVect * forceVector;

+0

두 분 모두 덕분에 그 매력을 발휘했습니다. 나는이 일을하기 위해 6 시간 가까이를 보냈다. 나는 네가 옳은 대답을 할 수 있었으면 좋겠다. – gargantuan

관련 문제