2012-08-02 62 views
0

我在這個小妖精這在它的init方法不明白什麼是錯誤的,得到EXC_BAD_ACCESS,任何提示?

lineDrawer = [[LineDrawer alloc]initWithLineColor:ccc3(color.r, color.g, color.b)]; 
lineDrawer.position = ccp(0,0); 
lineDrawer.anchorPoint = ccp(1,1); 

[self addChild:lineDrawer]; 
[self addChild:head]; 

[lineDrawer release]; 

沒什麼錯在這裏嗎?我可以釋放它作爲addchild保留對象。 (autorelease也可以)

雖然當我有版本,我得到EXC_BAD_ACCESS(code = 1)稍後。我也試着將release發佈到dealloc方法,但它給了我同樣的錯誤。

具有參考lineDrawer的唯一對象是spriteobject(玩家:CCSprite),它在定義和它不會有一個getter所以它甚至不能被其他對象進行訪問,所以我不明白如何這可能發生。什麼時候可以調用lineDrawer當只有擁有者引用它時,它會被處理掉嗎?

它發生在CCLayer的繪製方法內部的CC_NODE_DRAW_SETUP()行上。

任何提示?我知道這些問題在缺乏代碼的情況下總是很難解決,但很難知道要向您展示的代碼。如果我知道我可以自己解決它。我也嘗試在儀器中調試這些,但我不確定在哪裏尋找。

更新, 我試圖與殭屍調試啓用

This is the result

這是否和你說什麼? 這是LineDrawer類。這是我稍微修改過的其他人的課程。

http://pastebin.com/7Uv4GULy
http://pastebin.com/08NHeVt9

我有一種感覺,它的一些方法已排程或東西..

回答

1

由於您將lineDrawer對象添加到您的CCSprite的子集合中,因此可通過CCNode中定義的.children屬性獲得對其的公共引用。

然而,沒有在你發佈的代碼似乎是錯誤的,只是從CCLayerLineDrawer繼承,我不認爲CCLayer是有史以來設計用來作爲CCSprite的孩子......是否真的需要成爲你的播放器對象的孩子? (例如,它應該跟隨你的玩家精靈,因爲它移動並旋轉?)通常,圖層是活動的CCScene節點或其他圖層的子節點。

+0

是的,但崩潰發生在我釋放播放器類後,因此兒童應該清空權利(和釋放) 關於另一件事,它可能看起來有點奇怪,但它實際上是玩家的一部分,所以它對我有意義。也許它應該是LineDrawer:CCSprite,但正如你所說,它應該沒關係。我現在試圖用CCLOG的方式來追蹤它,每次發生這種情況時都會感到沮喪,因爲我一般都懶得用xcode或C來貶低它。 – 2012-08-03 00:40:50

0

大多數這些問題時,你是using ARC不會再發生。

很可能你已經過度釋放了一個對象。它不一定需要是lineDrawer。也許它是lineDrawer類中的一個對象。

解決這個問題的最佳方法是在構建方案中啓用NSZombieObjects並找出哪個對象被訪問。

+0

謝謝,這是一個很好的觀點。但是我沒有看到LineDrawer的任何問題。我已經更新了我的帖子,其中包括啓用殭屍的結果,但不知道它是否對你有幫助。 – 2012-08-02 23:44:18

相關問題