EXC_BAD_ACCESS Sprite Kit

4

我已经在这个网站和谷歌上搜索了一个星期,试图解决我应用程序中的一个错误。看起来内存管理不是问题,并且使用zombies的断点/工具也没有返回任何东西。我唯一能够弄清楚的事情就是问题源于这段代码块。当应用程序在特定情况下运行时,在我的main.m上返回EXC_BAD_ACCESS。我认为这可能就是问题所在,但感谢您事先查看它!

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {

if (!gameOver && gameStarted) {

[lines runAction:[SKAction removeFromParent]];
dotDrawn = NO;

UITouch* touch = [touches anyObject];
CGPoint positionInScene = [touch locationInNode:self];

pos2x = positionInScene.x;
pos2y = positionInScene.y;

lines = [SKShapeNode node];

CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, pos1x, pos1y);
CGPathAddLineToPoint(path, NULL, pos2x, pos2y);

lines.path = path;
lines.strokeColor = [UIColor grayColor];
[lines setLineWidth:3];

[self addChild:lines];
}

}


添加一个异常断点并将任何崩溃消息打印到日志中。请注意,您泄漏了cgpath对象,必须使用cgpathrelease释放它。 - CodeSmile
在 lines.path = path; 这行代码之后,你仍然“拥有”这个路径,所以你必须释放它。ARC 不会自动释放像 CGPath 这样的核心基础对象。 - CodeSmile
@LearnCocos2D 嘿,我尝试了断点异常和添加CGPathRelease(path); 但仍然崩溃和异常。 如果您有其他想法,我很乐意听取,但如果没有,感谢您至少查看它! - rcobelli
异常断点应该会显示最接近错误的代码行,其中源代码仍然可用。当Xcode崩溃时,它会突出显示哪一行? - CodeSmile
异常断点什么也做不了。它仍然会崩溃并用错误“Thread 1: EXC_BAD_ACCESS (code=1, address=0x500000000000018)”突出显示我的main.m文件。此外,如果有帮助的话,控制台上没有任何记录。 - rcobelli
显示剩余7条评论
1个回答

3
我遇到了同样的问题,症状也一样:这段代码在iOS 7.1上运行正常,但在iOS 8上却崩溃并出现EXC_BAD_ACCESS错误。尝试使用僵尸对象来跟踪错误访问源头没有帮助。
以下是我为解决此问题所做的工作:消除所有对[SKAction removeFromParent]的使用。
对于您的示例,这意味着将[lines runAction:[SKAction removeFromParent]]替换为[lines removeFromParent]
更棘手的是,要替换类似于以下内容的东西:
[myNode runAction:[SKAction sequence:@[ [SKAction fadeOutWithDuration:1.0],
                                        [SKAction removeFromParent] ]]];

使用以下方法:

[myNode runAction:[SKAction fadeOutWithDuration:1.0] completion:^{
    [myNode removeFromParent];
}];

编辑:使用正确的搜索词,我找到了一个链接,指向另一个描述相同问题的问题


谢谢!这真是救了我一命,我终于能够停止为这个漏洞工作的计时器,而且已经持续了很多,很多小时。再次感谢! - rcobelli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接