2014-11-24 28 views
8

喜歡它在標題中說,我試圖改變標籤文本點擊一個按鈕。錯誤出現在線self.playerChoice.text = "You: Rock"Swift:標籤文本 - >「致命錯誤:意外地發現零,同時展開一個可選值」

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" 

     } 
    } 
+0

「playerChoice」是否已初始化?你有連接IB的插座嗎? – gagarwal 2014-11-24 20:46:25

+0

應該是,我採取了添加標籤 – artie711 2014-11-24 21:02:55

回答

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" 
    } 


    } 

} 
+0

更新了我的代碼,仍然沒有工作 – artie711 2014-11-25 17:45:47

+0

和以前一樣的錯誤 – artie711 2014-11-26 11:56:07

+0

是的,我甚至刪除它並重新創建鏈接。在「you」標籤的連接檢查器下,播放器選擇連接到參考插座下的視圖控制器 – artie711 2014-11-26 12:02:19

3

看起來像玩家的選擇沒有初始化。

@IBOutlet var playerChoice: UILabel! 

也許連接插座和InterfaceBuilder/Storyboard丟失。嘗試再次連接。

我創建了一個小的演示,一切工作正常:

enter image description here

檢查你的IBOutlet中左邊的圓圈被填滿。否則,連接丟失。

+0

的必要步驟我唯一做的是控制,右鍵單擊標籤並拖動到viewController。在連接檢查員中,我有:玩家選擇連接到參考插座下的視圖控制器。 – artie711 2014-11-24 20:58:03

+0

我已經更新了我的答案。 – Stefan 2014-11-24 21:35:34

+0

是的,所有的圈子都填滿了,我也更新了代碼,仍然沒有工作 – artie711 2014-11-25 17:46:26

18

我就遇到了這個問題,事實證明,我是想編輯的標籤並沒有在當時的代碼存在跑了。

原來我是從父視圖引用同一視圖控制器的子容器視圖。我試圖改變的標籤只在容器視圖中,但是當兩個視圖都加載時,它運行了兩個視圖控制器,所以它試圖找到父視圖中不存在的標籤並拋出上述錯誤。

於是我明白了...如果一個視圖對象的引用拋出一個NIL的教訓..

  • 的看法是不正確映射到視圖控制器。
  • 視圖內的對象未映射到引用IBOutlet。
  • 或者在我的情況下,有多個視圖連接到同一個視圖控制器,並且在一個視圖中對視圖對象的引用在另一個視圖中沒有找到。
2

我在Xcode 6.2中遇到了同樣的問題。 我使用單獨的XIB而不是故事板。對我來說問題在於,在Swift中,如果名稱相同,Xcode不會自動將XIB與視圖控制器相關聯。因此,標籤的IBOutlets指向沒有給予致命的。

您可以將viewcontroller.xib更改爲modulename.viewcontroller.xib,以便xcode可以將其與視圖控制器關聯,並且問題消失。

更多選擇是在這個線程中提到:

Can't Load UIViewController XIB file in Storyboard in Swift

2

什麼固定的這對我來說(這讓我每次,尤其是當你是初次使用故事板)是確保你正在初始化您的視圖控制器,如下所示:

slideShowVC = (UIStoryboard(name: "Main",bundle: nil).instantiateViewControllerWithIdentifier("WWPhotoSlideShowVC") as! WWPhotoSlideShowVC) 

,而不是獨立的廈門國際銀行的方式:

slideShowVC = WWSlideShowVC() 

否則你的所有零售店將不會有很多令人頭痛的問題很快出現。

相關問題