我在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)
}
}
答案 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)
}
应该有效