我想綁定到對象的Objective-C對象屬性,但屬性是C++類。該屬性實際上是一個數學向量類,它更容易處理,因爲運算符重載對向量數學非常有用。 (我甚至沒有看到與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「(又名「VEC 3」)合成二傳手用不平凡的賦值運算符
的 原子屬性我使用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方法從傳遞的對象中提取值。 有關支持類型的表格的更多信息,請參閱鍵值編碼中的標量和結構支持編程指南
儘管如此,NSRect等結構也有包裝。可能有一種方法可以覆蓋原始的valueForKey:所以它也可以處理Vec3f。
因此,這將是新的問題:如何重寫valueForKey:和的setValue:forKey:所以它能夠處理我自己的C++對象?
在初始化程序中,是否嘗試將[self bind:etc ...放在if(self!= nil)塊中?塊之外的任何東西都意味着自己可能是零,並且編譯器會踢。 – Patrick
實際上這是一個打字錯誤。原來在if區塊內。我甚至試圖從外面綁定兩個完全獨立的對象。它仍然崩潰。 – zalavari
你有沒有嘗試過自己實施制定者? – zneak