-4

警告:线程 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
    }
}
4

3 回答 3

0

在该viewDidLoad()方法中,您正在创建一个名为“label”的新变量。我认为这是一个错误,您也想设置名为“label”的类变量。

要修复它,您只需更换

//Label
var label = UILabel()

经过

//Label
label = UILabel()

当您尝试访问方法中的“label”变量时incrementCount,该变量不会为 nil,您的应用程序也不会崩溃。

于 2017-10-30T15:41:48.723 回答
0

该错误的一个常见原因是试图强制解包 nil 可选。

您的问题是尝试访问self.label这是一个隐式展开的可选选项。它崩溃是self.label因为nil.

这是nil因为viewDidLoad您实际上并没有为您的label财产分配价值。相反,您使用同名的局部变量。

更新您viewDidLoad以使用该label属性而不是同名的语言环境变量。

换句话说,改变:

var label = UILabel()

至:

label = UILabel()
于 2017-10-30T15:39:10.377 回答
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
    }
}
于 2017-10-30T15:39:25.357 回答