坏访问错误在cocos2d游戏中SKD 4,而不是3

问题描述:

呀,所以这一块通过我还是一会儿一个循环,直到我想通了是怎么回事。随着苹果公司今天发布Xcode的最终版本,以及昨天推出的iOS 4,我终于开始考虑将应用程序移植到iOS 4上。坏访问错误在cocos2d游戏中SKD 4,而不是3

因此,我下载了新的SDK,并开始工作。在对我的应用程序进行一些处理后,想象一下当我遇到访问错误时出现的意外,(试图与一个释放对象进行交谈)。我讨厌那些错误,所以很难弄清楚该怎么做。所以,我花了最后45分钟试图找到我已经释放的对象。我记不清我改变了什么,并且错误信息没有帮助。我启用NSZombies(僵尸!!!),并得到这个错误:

2010-06-22 15:38:28.655 ProjectPidgey[17783:207] *** -[CCTargetedTouchHandler claimedTouches]: message sent to deallocated instance 0xd834b30 

这是关于一样有用,因为它似乎。我在Cocos2D中,所以我觉得有什么东西被触动,不再存在?但我在代码中找不到那样的东西。所以,我随心所欲地使用了旧版本的Xcode。编译并安装在运行iOS 3.0的模拟器上。工作很好。就像我创造的魅力一样。

所以现在,我的问题是,这里发生了什么。 SDK 4和3之间有什么区别,会导致错误错误?有任何想法吗?或者,这可能与cocos2d有关,需要更新?

编辑:我做了一些插科打诨,发现通过移除这行代码:

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    CGPoint touchPoint = [touch locationInView:[touch view]]; 
    touchPoint = [[CCDirector sharedDirector] convertToGL:touchPoint]; 
    if (![super containsTouchLocation:touch]) return NO; 
    [self.engine playerHitRedDot:self]; 
    //[self.parent removeChild:self cleanup:YES]; //REMOVED THIS LINE 
    return YES; 
} 

然后,它的工作原理。所以看起来CCTargedTouch处理程序与我的精灵链接(当我触摸它时会被删除),并且某人一切都​​无法解决......但是,我需要删除精灵(或者至少消失,但我想成为记忆良心),那么我该如何做到这一点?

谢谢!

2010-06-22 15:38:28.655 ProjectPidgey[17783:207] *** -[CCTargetedTouchHandler claimedTouches]: message sent to deallocated instance 0xd834b30 

这是非常有用的。它告诉你到底出了什么问题;一个过度发布的CCTargetedTouchHandler实例有一个调用它的方法。

每个基于Cocos2d的项目都有完整的源代码嵌入,如果您使用Instruments来跟踪僵尸,您可以看到对象创建,保留和/或释放的确切回溯。

这可能是在cocos2d中的错误,但我怀疑它读取的代码。这看起来更像是你的应用程序中的过度释放,它在之前没有触发崩溃,但是现在就完成了。要么不应该保留某些东西,有些东西并不是应该和/或你以不安全的方式在线程之间传递东西。

+0

我会将此标记为答案,但它在调试中帮助我,但我从未发现实际的错误。我在乐器中使用了NSZombies,并且使用了一切可能的手段来追踪错误,但最终还是把它当作了一个bug。并做了一些小技巧来解决它(在OS 4上做一件事,但在OS 3上做了一件不同的事情)。它的工作原理,但我希望有一个更好的解决方案... – 2010-06-28 21:15:36