具有现有分配的变量上的Swift EXC_BAD_ACCESS

时间:2015-11-18 00:23:07

标签: ios swift exc-bad-access

我对附加的错误消息有疑问。它在变量closeTree1周围显示一个EXC_BAD_ACCESS代码,定义如下:

让closeTree1 = SKSpriteNode(纹理:SKTexture(imageNamed:“tree1”))

正如你在调试区域右侧底部看到的那样,我有一条打印行显示Xcode没有释放closeTree1:

closeTree1:name:'(null)'texture:['tree1'(721 x 1112)]位置:{2902.64990234375,577.58203125}比例:{1.00,1.00}大小:{420,655.16400146484375}锚:{0.5, 0.5}旋转:0.00

我之前在Swift中没有遇到过早期释放的问题,所以我认为这与其他事情有关。我所做的研究表明,EXC_BAD_ACCESS来自一个过度释放的变量,更多的是Objective-C问题。

这种崩溃不一致,总是在我重置场景时。我不是在过渡场景,而是将所有孩子从同一场景中移除并添加所有内容。

我使用过NSZombies和断点,但无济于事。我已经在这个问题上工作了好几天,并在看似琐碎的行上看到了其他几个EXC_BAD_ACCESS错误。如果有人能够对此有所了解,那将非常感激。

Error Message

1 个答案:

答案 0 :(得分:0)

我能够弄清楚这个问题,我会一般性地讨论这个问题,因为我没有在问题中提供很多细节。

仍然分配了closeTree1,因此它不是手动内存管理或ARC问题。我正在使用SKAction.runBlock({functionname()}),因此在评估操作时执行了functionname()。简而言之,这是发生这种情况的框架的错误部分,所以我使用runBlock来设置一个在update()中运行函数的变量,现在它工作得很好:)。外卖似乎是模糊思考的帧进展可能导致EXC_BAD_ACCESS。

我遇到了一些非常奇怪的事情(我确信这是不可能的)这个错误。当EXC_BAD_ACCESS错误没有出现并且程序运行时,有时会将相同的Sprite添加到场景中两次,同时使用以下两个输入命令!它必须是相同的Sprite,因为只有一个SKSpriteNode具有该图像并遵循这些命令。我不确定这是否是一个SpriteKit错误,但它现在可以正常工作。