Swift:标签文本 - >"致命错误:在展开Optional值时意外发现nil"

art*_*711 9 null label swift

就像它在标题中所说,我试图在点击按钮时更改标签文本.行出现错误self.playerChoice.text = "You: Rock"

import UIKit

class ViewController: UIViewController {

var player : Int = Int()

@IBOutlet weak var readyLabel: UILabel!

@IBAction func noButton(sender: AnyObject) {
    exit(0)
}

// ---------------------------------------------------------

@IBOutlet var computerChoice: UILabel!

@IBOutlet var playerChoice: UILabel!

@IBOutlet var score: UILabel!


// Variables -------------------------------------------------

let Rock : String = "Rock"
let Paper : String = "Paper"
let Scissors : String = "Scissors"

//------------------------------------------------------------



override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    }


// ----------------------------------------------------------------

@IBAction func rockButton(rockbut: UIButton) {

    player = 0
    var ai = arc4random_uniform(3)
    self.playerChoice.text = "You: Rock"

    }

@IBAction func paperButton(paperbut: UIButton) {

    player = 1
    var ai = arc4random_uniform(3)
    self.playerChoice.text = "You: Paper"

    }

@IBAction func scissorsButton(scissorsbut: UIButton) {

    player = 2
    var ai = arc4random_uniform(3)
    self.playerChoice.text = "You: Scissors"

        }
    }
Run Code Online (Sandbox Code Playgroud)

Chr*_*ley 21

我遇到了这个问题,结果发现我试图编辑的标签在代码运行时不存在.

事实证明我从父视图子容器视图引用了相同的视图控制器.我试图更改的标签只在容器视图中,但是当两个视图都加载时,它运行了两个视图控制器,因此它试图找到父视图中不存在的标签并抛出上述错误.

所以我学到的教训......如果对视图对象的引用正在抛出一个NIL ..

  • 视图未正确映射到视图控制器.
  • 视图中的对象未映射到引用IBOutlet.
  • 或者在我的情况下,有多个视图连接到同一个视图控制器,并且在另一个视图中找不到对一个视图中的视图对象的引用.


Dha*_*esh 0

我已经尝试过这段代码,它对我来说工作得很好:

class ViewController: UIViewController {

var player : Int = Int()      //Declare this globally

@IBOutlet weak var readyLabel: UILabel!

@IBAction func noButton(sender: AnyObject) {
    exit(0)
}

// ---------------------------------------------------------

@IBOutlet var computerChoice: UILabel!

@IBOutlet var playerChoice: UILabel!

@IBOutlet var score: UILabel!


// Variables -------------------------------------------------

let Rock : String = "Rock"
let Paper : String = "Paper"
let Scissors : String = "Scissors"

//------------------------------------------------------------

@IBAction func rockButton(rockbut: UIButton) {
     player = 0
    var ai = arc4random_uniform(3)
    self.playerChoice.text = "You: Rock"
}



@IBAction func paperButton(sender: UIButton) {
     player = 1
    var ai = arc4random_uniform(3)
    self.playerChoice.text = "You: Paper"
}

@IBAction func scissorsButton(sender: UIButton) {
     player  = 2
    var ai = arc4random_uniform(3)
    self.playerChoice.text = "You: Scissors"
}



override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    var p : String = "Undecided"

    if (player == 0) {
        var p: String = "Rock"
    } else if (player == 1) {
        var p: String = "Paper"
    } else if (player == 2) {
        var p: String = "Scissors"
    }


    }

}
Run Code Online (Sandbox Code Playgroud)