2012-05-31 65 views
0

這個問題一直困惑,現在我好幾天。我有一個NSString,'spriteType'。它是使用屬性和綜合方法聲明的。在創建字符串的層中,我還創建了一個CCNode。該節點是在一個方法中創建的。對象過度釋放按鈕按下

- (void) spritePick { 

CCMenuItemImage *go = [CCMenuItemImage itemFromNormalImage:@"button_go.png" selectedImage:@"button_go_selected.png" target:self selector:@selector(test)]; 
spritePickMenu = [CCMenu menuWithItems:go, nil]; 
spritePickMenu.position = ccp(0,0); 

spritePick = [CCNode node]; 
[spritePick addChild:spritePickMenu]; 
spritePick.position = ccp(240,160); 
[self addChild: spritePick]; 
} 

'測試' 方法,它是從按鈕調用,很簡單:

- (void) test { 
NSLog(@"%@",spriteType); 
} 

的NSLog的線崩潰我的遊戲,並給出錯誤:從EXC_BAD_ACCESS

Anywhere的開在'測試'方法中,代碼工作正常。爲什麼會來給我當方法已經從節點稱爲誤差,但不會把它給我,當它已經從別的地方叫什麼名字?

如果需要的話我可以給你完整的代碼。

+0

再次檢查代碼流,有時我們可能會漏掉一些東西。根據我的猜測,「spriteType」沒有初始化。有些地方在代碼中寫入以下行,然後檢查self.spriteType = @「」; – ajay

+0

也許你正在做一些內存錯誤,造成殭屍,最終導致應用程序崩潰。提供完整的代碼看起來是個好主意。 – Lio

回答

1

您使用的是您的spriteType財產申報哪些屬性?

如果你的項目中使用ARC,標題應該是這樣的:

@property (nonatomic, strong) NSString *spriteType; 

雖然實現應該是這樣的:

@synthesize spriteType = spriteType_; 

如果聲明/合成你的財產就這樣,然後NSLog(@"%@", self.spriteType)只是寫入(空)到控制檯(我測試了仔細檢查)。

這是一個很好的做法使用self.,而不是試圖直接訪問後盾伊娃來訪問你的屬性。

既然你看到EXC_BAD_ACCESS我假設你是不是保持了強引用self.spriteType.

如果你的項目使用ARC,你需要確保你與LLVM 3.0或更高版本編譯,儘可能詳細in this answer.

+0

當我使用這個時,我在@property上得到一個錯誤:「在'strong'之前期望一個屬性屬性」 – akuritsu

+0

您的項目是否使用ARC並使用GCC進行編譯?您需要使用LLVM/Clang進行編譯。相應地更新我的答案。 –

+0

目前我沒有使用ARC,因爲我使用的是cocos2d模板,因此它不會自動啓用。我可以啓用它,但是它值得嗎? – akuritsu