在didMoveToView方法中将变量指定为rootViewController并不起作用

时间:2015-02-11 03:29:55

标签: swift uiviewcontroller sprite-kit

当我在SpriteKit的默认“GameScene”类中创建变量时:

var viewController = self.view?.window?.rootViewController as GameViewController

它在touchesBegan方法和其他一些方法中工作,但是,它在“didMoveToView”中声明时总是会导致错误。在我正在创建的游戏中,我需要在此方法中调用它。

出现的错误是

“EXC_BAD_INSTRUCTION(code = EXC_I386_INVOP,subcode = 0x0”

错误。没有进一步的信息或崩溃日志。

感谢任何能够在这个悲惨的时刻帮助我的人。

1 个答案:

答案 0 :(得分:0)

调用self.view?.window时,

nildidMoveToView。只有在初始化完所有内容后,才会将其添加到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)
}