2013-07-13 31 views
1

我在嘗試調用某個方法時遇到錯誤。Objective C - 錯誤:線程1:EXC_BAD_ACCESS代碼= 2

的方法

- (void)setSpeed:(GLKVector2)newSpeed{ //Error message (see title) points to here 
    self.speed = GLKVector2Make(newSpeed.x, newSpeed.y); 
} 

呼叫

[self setSpeed:GLKVector2Make(0, 0)]; 

有什麼想法?

+4

有一個無限循環正在進行。當你調用'self.speed = ...'時,它會調用setter方法 - (void)setSpeed:(GLKVector2)newSpeed;',然後調用'self.speed = ...'。用'_speed = ...'代替'self.speed = ...'將修正錯誤。 – msgambel

+0

我巧合地選擇了一個已經存在的方法名稱嗎? – user2577959

+0

是的。屬性('self.speed')自動生成2個方法:A ** Getter **(' - (GLKVector2)speed;')和** Setter **(' - (void)setSpeed:(GLKVector2)速度;')。你不小心覆蓋了** Setter **方法。 – msgambel

回答

9

嘗試寫

_speed = GLKVector2Make(newSpeed.x, newSpeed.y); 

speed = GLKVector2Make(newSpeed.x, newSpeed.y); 

,而不是

self.speed = GLKVector2Make(newSpeed.x, newSpeed.y); 
+0

感謝它的工作。 self.var和_var有什麼區別? –

+1

self.var取值屬性var,_var - 直接取值的變量 – stosha

+0

非常感謝。 –

3

self.speed=使用設置選擇爲它的任何訪問的speed財產。名爲「speed」的屬性的setter的默認名稱將是setSpeed:。這是你正在使用的方法,它只是不停地調用自己,永遠不會停止。你想直接設置實例變量(如果你只有一個@property聲明,並沒有明確的@synthesize,這將是_speed)。

相關問題