Swift:标签文本 - >“致命错误:意外地发现零,同时展开一个可选值”
喜欢它在标题中说,我试图改变标签文本点击一个按钮。错误出现在线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"
}
}
我曾尝试此代码,它为我工作的罚款:
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"
}
}
}
看起来像玩家的选择没有初始化。
@IBOutlet var playerChoice: UILabel!
也许连接插座和InterfaceBuilder/Storyboard丢失。尝试再次连接。
我创建了一个小的演示,一切工作正常:
检查你的IBOutlet中左边的圆圈被填满。否则,连接丢失。
我就遇到了这个问题,事实证明,我是想编辑的标签并没有在当时的代码存在跑了。
原来我是从父视图和引用同一视图控制器的子容器视图。我试图改变的标签只在容器视图中,但是当两个视图都加载时,它运行了两个视图控制器,所以它试图找到父视图中不存在的标签并抛出上述错误。
于是我明白了...如果一个视图对象的引用抛出一个NIL的教训..
- 的看法是不正确映射到视图控制器。
- 视图内的对象未映射到引用IBOutlet。
- 或者在我的情况下,有多个视图连接到同一个视图控制器,并且在一个视图中对视图对象的引用在另一个视图中没有找到。
我在Xcode 6.2中遇到了同样的问题。 我使用单独的XIB而不是故事板。对我来说问题在于,在Swift中,如果名称相同,Xcode不会自动将XIB与视图控制器相关联。因此,标签的IBOutlets指向没有给予致命的。
您可以将viewcontroller.xib更改为modulename.viewcontroller.xib,以便xcode可以将其与视图控制器关联,并且问题消失。
更多选择是在这个线程中提到:
什么固定的这对我来说(这让我每次,尤其是当你是初次使用故事板)是确保你正在初始化您的视图控制器,如下所示:
slideShowVC = (UIStoryboard(name: "Main",bundle: nil).instantiateViewControllerWithIdentifier("WWPhotoSlideShowVC") as! WWPhotoSlideShowVC)
,而不是独立的厦门国际银行的方式:
slideShowVC = WWSlideShowVC()
否则你的所有零售店将不会有很多令人头痛的问题很快出现。
“playerChoice”是否已初始化?你有连接IB的插座吗? – gagarwal 2014-11-24 20:46:25
应该是,我采取了添加标签 – artie711 2014-11-24 21:02:55