警告:线程1:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)
import UIKit
class ViewController: UIViewController {
var count = 0
var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
//Label
var label = UILabel()
label.frame = CGRect(x: 150, y: 150, width: 60, height: 60)
label.text = "0"
self.view.addSubview(label)
//Button
var button = UIButton()
button.frame = CGRect(x: 150, y: 250, width: 60, height: 60)
button.setTitle("Click", for: .normal)
button.setTitleColor(UIColor.blue, for: .normal)
self.view.addSubview(button)
button.addTarget(self, action: #selector(ViewController.incrementCount), for: UIControlEvents.touchUpInside)
}
@objc func incrementCount() {
self.count = self.count + 1
self.label.text = "\(self.count)" //here got the warning
}
}
答案 0 :(得分:0)
该错误的一个常见原因是试图强制解包nil可选。
您的问题是尝试访问self.label
,这是一个隐式解包的可选项。它崩溃是因为self.label
是nil
。
它是nil
,因为在viewDidLoad
中您实际上并未为label
属性分配值。相反,您使用同名的局部变量。
更新viewDidLoad
以使用label
属性而不是同名的区域设置变量。
换句话说,改变:
var label = UILabel()
为:
label = UILabel()
答案 1 :(得分:0)
应该有所帮助。在您的变量标签中为nil,因为您在viewDidLoad
中创建了新变量import UIKit
class ViewController: UIViewController {
var count = 0
var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
//Label
label = UILabel()
label.frame = CGRect(x: 150, y: 150, width: 60, height: 60)
label.text = "0"
self.view.addSubview(label)
//Button
var button = UIButton()
button.frame = CGRect(x: 150, y: 250, width: 60, height: 60)
button.setTitle("Click", for: .normal)
button.setTitleColor(UIColor.blue, for: .normal)
self.view.addSubview(button)
button.addTarget(self, action: #selector(ViewController.incrementCount), for: UIControlEvents.touchUpInside)
}
@objc func incrementCount() {
self.count = self.count + 1
self.label.text = "\(self.count)" //here got the warning
}
}
答案 2 :(得分:0)
在viewDidLoad()
方法中,您将创建一个名为“label”的新变量。我认为这是一个错误,你想设置名为“label”的类变量。
要修复它,您只需要替换
//Label
var label = UILabel()
通过
//Label
label = UILabel()
当您尝试访问incrementCount
方法中的“label”变量时,该变量将不会为nil且您的应用不会崩溃。