2015-02-11 27 views
0

當我SpriteKit的默認創建一個變量「GameScene」類:在didMoveToView方法分配變量RootViewController的不工作

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

它工作在的touchesBegan方法和其他幾個人,但是,它總是引起在「didMoveToView」中聲明時出錯。在我創建的遊戲中,我需要在這種方法中調用它。

在出現的錯誤是

「EXC_BAD_INSTRUCTION(代碼= EXC_I386_INVOP,子碼=爲0x0」

錯誤,沒有進一步的信息或系統崩潰日誌。

由於任何人誰可以幫助我在這個時候大悲哀。

回答

0

self.view?.windownildidMoveToView被調用。它加入到一切只初始化後window hierarchy 。你可以做的是在GameScene內部創建一個gameViewController屬性,並在調用presentScene之前將其分配給GameViewController

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