Я хотел бы привязываться к объектам Objective-C друг к другу, но свойствами является класс C++. свойство фактически является математическим векторным классом, с которым легче работать, поскольку перегрузка оператора весьма полезна с векторной математикой. (Я даже не вижу хороший способ работать с векторной математикой с объектами-C, isthere?)Как связать объекты 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;
}
вопрос по Xcode: Atomic свойства типа «Vec3f» (он же «Vec3») синтез сеттер с помощью нетривиального оператора присваивания
Я использую класс Vec3f из cinder: http://libcinder.org/docs/v0.8.3/classcinder_1_1_vec3.html
Вопрос в том, что как связывать объекты C++ как свойства в объективе-c, или это даже возможно? Есть ли другой способ? (В случае, если у вас есть какие-либо идеи, как сделать чистый вектор, матрица и т.д. математику в Objective-C, пожалуйста, дайте мне знать.)
Это то, что я нашел в документации:
КВЦ Конверсия Скалярные и структурные значения Стандартные реализации методов KVC valueForKey: и setValue: forKey: обеспечивают поддержку автоматической привязки объектов к скалярным типам данных, таким как BOOL, char, double, float, int и структуры, такие как NSPoint, NSRange, и NSRect. Когда скрипт Cocoa вызывает valueForKey: чтобы получить значение, KVC автоматически преобразует значение в объект NSNumber (для скаляров) или объект NSValue (для структур), если это необходимо. Аналогично, setValue: forKey: определяет тип данных, требуемый соответствующей переменной или переменной экземпляра для указанного ключа. Если тип данных не является объектом, то значение извлекается из переданного объекта с использованием соответствующего метода NSNumber илиNSValue. Дополнительные сведения, в том числе таблицу поддерживаемых типов, см. В разделе «Скалярная и структурная поддержка в кодировании с ключом». Руководство по программированию
По-прежнему существуют обертки для таких структур, как NSRect. Возможно, есть способ переопределить исходное значениеForKey: поэтому он также может обрабатывать Vec3f.
Так что это будет новый вопрос: Как переопределить valueForKey: и SetValue: forKey: так было бы в состоянии справиться с моей C++ объект?
В инициализаторе вы пытались поместить [self bind: etc ... WITHIN в блок if (self! = Nil)? Все, что находится за пределами блока, подразумевает, что self может быть nil и компилятор будет пинать. – Patrick
Фактически это была ошибка ввода. Оригинал находится внутри блока if. Я даже пытался связать два совершенно разных объекта снаружи. И он по-прежнему падает. – zalavari
Вы пробовали реализовать сеттер самостоятельно? – zneak