当我在SpriteKit的默认“GameScene”类中创建变量时:
var viewController = self.view?.window?.rootViewController as GameViewController
它在touchesBegan方法和其他一些方法中工作,但是,它在“didMoveToView”中声明时总是会导致错误。在我正在创建的游戏中,我需要在此方法中调用它。
出现的错误是
“EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP,subcode = 0x0”
错误。没有进一步的信息或崩溃日志。
感谢任何能够在这个悲惨的时刻帮助我的人。
答案 0 :(得分:0)
self.view?.window
时, nil
为didMoveToView
。只有在初始化完所有内容后,才会将其添加到window hierarchy
。您可以做的是在GameScene
内创建一个gameViewController属性,并在调用GameViewController
之前将其分配到presentScene
内。
class GameScene: SKScene,SKPhysicsContactDelegate {
weak var gameViewController : GameViewController? = nil
}
内部GameViewController
override func viewDidLoad() {
super.viewDidLoad()
//Other code
scene.gameViewController = self
skView.presentScene(scene)
}
您可以像这样访问它
override func didMoveToView(view: SKView) {
println(self.gameViewController?.yourPropertyName)
}