我想将 Objective-C 对象的属性相互绑定,但属性是 c++ 类。该属性实际上是一个数学向量类,它更易于使用,因为运算符重载对向量数学非常有用。(我什至没有看到使用 Objective-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;
}
Xcode的问题:'Vec3f'(又名'Vec3')类型的原子属性使用非平凡赋值运算符合成setter
我使用 cinder 中的 Vec3f 类:http: //libcinder.org/docs/v0.8.3/classcinder_1_1_vec3.html
所以问题是如何将 c++ 对象绑定为objective-c 中的属性,甚至有可能吗?还有其他方法吗?(如果您知道如何在 Objective-c 中进行干净的向量、矩阵等数学运算,请告诉我。)
这是我在文档中找到的:
标量和结构值的 KVC 转换 KVC 方法 valueForKey: 和 setValue:forKey: 的默认实现支持标量数据类型(如 BOOL、char、double、float、int 和 NSPoint、NSRange 和 NSRect 等结构)的自动对象包装。当 Cocoa 脚本调用 valueForKey: 来获取一个值时,如果需要,KVC 会自动将该值转换为 NSNumber 对象(对于标量)或 NSValue 对象(对于结构)。同样, setValue:forKey: 确定指定键的适当访问器或实例变量所需的数据类型。如果数据类型不是对象,则使用适当的 NSNumber 或 NSValue 方法从传递的对象中提取值。有关更多信息,包括支持的类型表,请参阅 Key-Value Coding Programming Guide 中的 Scalar and Structure Support
尽管如此,还是有像 NSRect 这样的结构的包装器。可能有一种方法可以覆盖原始 valueForKey: 所以它也可以处理 Vec3f。
所以这将是一个新问题:如何覆盖valueForKey:和setValue: forKey:以便能够处理我自己的 c++ 对象?