EXC_BAD_INSTRUCTION错误

时间:2014-07-24 21:26:50

标签: ios swift sprite-kit exc-bad-instruction

我在Xcode 6中已经多次遇到过这个问题。问题是我有一个球跑,当他击中一个阻挡他死了。他可以跳。但是第一个块总是崩溃。就好像我只是像在空中一样正常滚动并击中第一个区块时它就会冻结并关闭。

它给了我这个错误:

  

主题1:EXC_BAD_INSTRUCTION(代码= EXC_1386_INVOP,子代码= 0x0)

第2行和第7行的背景为绿色(计算空格)。

这是错误行:

func didBeginContact(contact:SKPhysicsContact) {
    died()
}

func died() {
    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene { 
        let skView = self.view as SKView                                                                
        skView.ignoresSiblingOrder = true
        scene.size = skView.bounds.size
        scene.scaleMode = .AspectFill
        skView.presentScene(scene)
    }
}

3 个答案:

答案 0 :(得分:2)

EXC_BAD_INSTRUCTION意味着您的代码中存在某个断言。您提供的可以抛出断言的唯一代码行是:

let skView = self.view as SKView

如果无法将self.view强制转换为SKView,它将断言。似乎self.view实际上并不是SKView。

可以肯定的是,你可以像使用场景一样进行可选的演员:

if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
    if let skView = self.view as? SKView {                                                          
        skView.ignoresSiblingOrder = true
        scene.size = skView.bounds.size
        scene.scaleMode = .AspectFill
        skView.presentScene(scene)
    }
}

答案 1 :(得分:0)

我相信我找到了解决问题的方法。

let skView = self.view as SKView更改为

if let skView = self.view as SKView!

答案 2 :(得分:0)

if let skView = self.view as? SKView! {                                                          
    skView.ignoresSiblingOrder = true
    scene.size = skView.bounds.size
    scene.scaleMode = .AspectFill
    skView.presentScene(scene)
}

应该有效