【问题标题】:EXC_BAD_INSTRUCTION bugEXC_BAD_INSTRUCTION 错误
【发布时间】:2014-07-24 21:26:49
【问题描述】:

我在 Xcode 6 中多次遇到过这个问题。问题是我让一个球跑起来,当他击中一个障碍时,他就死了。不过他可以跳。但是第一个块总是崩溃。就像我像不在空中一样正常滚动并击中第一个方块时它会冻结并关闭。

它给了我这个错误:

线程 1:EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP, subcode=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)
    }
}

【问题讨论】:

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


    【解决方案1】:

    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)
        }
    }
    

    【讨论】:

    • 我不认为正确的术语是“断言”,但是是的。
    • @zneak,我认为错误的部分是“扔一个”,我仍然习惯于例外:)。我更新它只是说“它会​​断言”
    • @zneak 见the docs on assertions
    • @zneak 我认为“断言”是正确的:框架断言故意向处理器抛出错误指令以引发异常
    • 我试过了。然后我遇到了这个问题:'SKView!' Conditional downcast到 'SKView' 总是成功的。在 Xcode 上,我真的不是一个好的编码器,但这就是我尝试它时得到的。请帮我摆脱这个错误,因为我真的不喜欢它。
    【解决方案2】:

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

    let skView = self.view as SKView 更改为

    if let skView = self.view as SKView!
    

    【讨论】:

      【解决方案3】:
      if let skView = self.view as? SKView! {                                                          
          skView.ignoresSiblingOrder = true
          scene.size = skView.bounds.size
          scene.scaleMode = .AspectFill
          skView.presentScene(scene)
      }
      

      应该工作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多