Objective-C 개체 속성을 서로 바인딩하고 싶지만 속성은 C++ 클래스입니다. 이 속성은 실제로 수학적 벡터 클래스이며, 연산자 오버로드가 벡터 수학에 유용하기 때문에 작업하기가 더 쉽습니다. (객관적인 C 객체로 벡터 수학을 사용하는 것도 좋은 방법입니다.)objective-c에서 C++ 객체를 속성으로 바인딩하는 방법은 무엇입니까?
문제는이 벡터 속성을 바인딩하면 응용 프로그램이 충돌한다는 것입니다. 여기 은 예입니다
@interface M_Node : NSObject{
Vec3f pos;
M_Node *manipulator
}
@property Vec3f pos;
@end
@implementation
@synthesize pos;
@dynamic pos;
-(void)setPos:(Vec3f)newPos{
pos=Vec3f(newPos);
}
-(Vec3f)pos{
return Vec3f(pos);
}
- (id) init
{
self = [super init];
if (self != nil) {
[self bind:@"pos" toObject:self withKeyPath:@"manipulator.pos" options:nil];
}
return self;
}
엑스 코드로 문제 형식 'Vec3f'(일명 'VEC3') 합성 세터 사용 사소하지 않은 할당 연산자
의 원자 재산 내가에서 Vec3f 클래스를 사용 cinder : http://libcinder.org/docs/v0.8.3/classcinder_1_1_vec3.html
그래서 문제는 objective-c에서 C++ 객체를 속성으로 바인딩하는 것입니까, 아니면 가능합니까? 다른 방법이 있습니까? (경우 어떻게 목표 - C 깨끗한 벡터, 행렬 등 수학을 수행하는 방법 알려 주시기 바랍니다 어떤 생각을 가지고있다.)
이 내가 설명서에있는 것입니다 :의
KVC 변환 스칼라 및 구조 값 KVC 메서드 valueForKey : 및 setValue : forKey :의 기본 구현은 BOOL, char, double, float, int 및 NSPoint, NSRange 및 같은 구조체와 같은 스칼라 데이터 형식의 자동 개체 래핑을 지원합니다. 및 NSRect. Cocoa 스크립팅이 valueForKey :를 호출하여 값을 얻으면 KVC는 필요에 따라 값을 NSNumber 객체 (스칼라의 경우) 또는 NSValue 객체 (구조의 경우)로 자동 변환합니다. 마찬가지로 setValue : forKey :는 지정된 접근 자나 인스턴스 변수가 지정한 키에 필요한 데이터 유형을 결정합니다. 데이터 유형이 오브젝트가 아니면 값은 적절한 NSNumber orNSValue 메소드를 사용하여 전달 된 오브젝트에서 추출됩니다. 지원되는 형식의 테이블을 비롯한 자세한 내용은 키 값 코딩의 스칼라 및 구조 지원 프로그래밍 가이드
여전히 NSRect와 같은 구조체에 대한 래퍼가 있습니다. 원래 valueForKey :를 재정의하는 방법이있을 수 있으므로 Vec3f도 처리 할 수 있습니다. 및 의 setValue : forKey : 그래서 내 자신의 C 객체 ++ 처리 할 수있을 것 가 어떻게 valueForKey를 오버라이드 (override) :
그래서이 새 질문 있을까?
이니셜 라이저에서 [self bind : etc ... if (self! = nil) 블록 안에 넣으려고 했습니까? 블록 외부의 어떤 것이라도 자기가 무효가 될 수 있고 컴파일러가 쫓아 낼 수 있음을 의미합니다. – Patrick
실제로 입력 오류였습니다. 원본은 if 블록 안에 있습니다. 심지어 두 개의 완전히 다른 개체를 외부에서 바인딩하려고했습니다. 그리고 그것은 여전히 충돌합니다. – zalavari
직접 세터를 구현해 보셨습니까? – zneak