从 GameViewController 调用的 GameScene 方法:Thread 1 exc_bad_instruction (code=exc_i386_invop subcode=0x0)

GameScene method called from GameViewController: Thread 1 exc_bad_instruction (code=exc_i386_invop subcode=0x0)

我是 Swift 的新手,遇到以下问题。

我的这个按钮 GameViewController.swift:

var currentGame : GameScene!
currentGame = GameScene()


 @IBAction func restartGame(sender: UIButton) {
        currentGame.loadView()  
 }

我的这个函数GameScene.swift:

loadView(){
        ScoreLabel = UILabel(frame: CGRect(x: 0, y: 0, width: 150, height: 100))
        ScoreLabel.center = (self.view?.center)!
        ScoreLabel.text = "\(currentScore)"
        ScoreLabel.textColor = SKColor.whiteColor()
        ScoreLabel.textAlignment = NSTextAlignment.Center
        ScoreLabel.font = UIFont(name: "GROBOLD", size: 80)

        HighScoreLabel = UILabel(frame: CGRect(x: 7, y: -10, width: 300, height: 100))
        HighScoreLabel.text = "High Score: \(highScore)"
        HighScoreLabel.textColor = SKColor.whiteColor()
        HighScoreLabel.textAlignment = NSTextAlignment.Left
        HighScoreLabel.font = UIFont(name: "GROBOLD", size: 30)
        self.view?.addSubview(ScoreLabel)
        self.view?.addSubview(HighScoreLabel)
}

在ScoreLabel.center = (self.view?.center)!

Xcode 告诉我线程 1 exc_bad_instruction (code=exc_i386_invop subcode=0x0)

我一直在谷歌搜索此错误和任何相关主题,但没有成功。

我不清楚或不相关的答案。

有人可以解释一下我的代码有什么问题吗?

我的 self.view 似乎不存在,我不明白为什么。

非常感谢!

ScoreLabel.center = (self.view?.center)!

据推测,此时 self.view 为零。你在末尾有一个 ! 确保 Swift 你知道有一个中心视图。既然它崩溃了,也许这种保证是基于一个错误的假设。

名为 loadView 的方法应该可以加载视图,对吧?文档说 "assign the root view of that hierarchy to the view controller’s view property."

所以这个 loadView 方法应该包含类似

的东西
super.loadView()

让视图层次滚动起来。

我找到了解决方案。我将我的 ScoreLabel 移到了我的 viewDidLoad 方法中。

视图肯定会在该方法中实例化,因此 nil 错误消失了。

由于我无法确定的原因,视图尚未在我的 loadView 方法中加载,这就是导致 nil 错误的原因。

感谢您的帮助!