2010-01-25 35 views
2

我有一個非常奇怪的問題,試圖建立一個簡單的float值1二傳手消氣奇怪@property

我的財產:

{ 
float direction; 
} 
@property(nonatomic)float direction; 

這是合成的:

@synthesize direction; 

然後我使用下面的代碼:

- (void)setDirection:(float)_direction { 
    NSLog(@"Setter called with value of %f",_direction); 
    self->direction = _direction; 
} 

出於測試目的...

當我試圖改變這個值,

[[w getCharacter] setDirection:1.0f]; 

其中[w getCharacter]給出了這樣的:

return [[[self scene] gameLayer] player]; 

我得到警告,「setDirection沒有定義「。

如果我切換到點符號([w getCharacter].direction),我會被「以前的錯誤困惑,救助」。

這裏是古怪開始的地方。當我嘗試更改該值時,調試消息顯示_direction = 0.00000。當我檢查數字後,它仍然是0.000。我清楚地試圖將其更改爲1,爲什麼這不起作用?

+1

您是否包含Player類的頭文件? – gerry3 2010-01-25 22:46:28

+0

不用謝謝,那是問題所在。謝謝。我從來沒有意識到,缺乏標題可能會奇怪這種奇怪的東西。我感到很傻,這是一個簡單的修復。 – luke 2010-01-26 03:46:36

回答

1

最簡單的解釋是[w getCharacter]不返回您認爲它的對象的類。只有爲其定義方向的類才能響應該消息。您應該通過顯式調用它爲其定義的類來測試它。

有可能你沒有包含定義方法的頭文件。

兩個可能無關的問題:

self->direction建設將一個標量值的工作,但它周圍的整個概念類的運行結束。在這種情況下,只需使用:'direction = _direction;`,它會直接設置它。

Apple保留所有以下劃線開頭的名稱供其內部使用。您不應該使用它們,因爲Objective-c具有全局名稱空間。您可能無意中使用了在框架內深層定義的Apple變量。 (這就是爲什麼框架常量都以NS,CF,CA等開頭的原因)

+0

非常感謝,這個解決了它這是頭文件,我沒有包含任何我需要的頭文件,我沒有意識到這個錯誤可能是由於缺少頭文件,我只是認爲還有其他奇怪的事情發生了, 至於_direction。這是一個錯誤,我希望我永遠不必與之戰鬥。 再次感謝您的最小頭髮拔出。 – luke 2010-01-26 03:44:38

1

[注意:在評論中,作者說忽略這個答案。

self.direction = 1;是

[self setDirection: 1]; 

語法糖,當你調用

-(void)setDirection:(float)_newDirection { 
     self.direction = _newDirection; 
} 

你似乎在告訴編譯器或預處理器建立一個遞歸循環給你。預編譯器(我覺得)它變成這樣:

-(void)setDirection:(float)_newDirection { 
     [self setDirection: _newDirection]; 
} 

如果你把它簡單地

-(void)setDirection:(float)_newDirection { 
     direction = _newDirection; 
} 

分配應該工作(它的工作對我剛纔)

+2

luke沒有遞歸循環。他的二傳手使用「自我方向」,它已經與「方向」一樣,與不正確的「自我方向」不一樣。 – gerry3 2010-01-25 22:43:02

+0

如果我切換爲點符號([w getCharacter] .direction),我會被「以前的錯誤困惑,救助」。 是什麼讓我去看看。它爲我編譯,但按照我的預期行事。 – justin 2010-01-25 22:44:44

+0

哦,你是對的。在此之前存在這個問題。 – justin 2010-01-25 22:50:07