我希望我的应用程序在按下按钮时仅在控制台中打印文本。这是在从类中调用方法时发生的。它只能在一个操场上制作。它崩溃了,给了我:libc ++ abi.dylib:以类型为NSException的未捕获异常终止
非常有趣的事情:如果我在类之外使用该方法,该方法将不会崩溃。
导入UIKit导入PlaygroundSupport
class MyViewController:UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var giac=giacomo()
let view=UIView()
view.backgroundColor = .white
let button = UIButton()
button.frame = CGRect(x:0,y:0, width:50, height: 50)
button.tintColor = .red
button.backgroundColor = .black
button.setTitle("Test",for: .normal)
button.addTarget(self, action: #selector(giac.action(_button:)), for: .touchUpInside)
view.addSubview(button)
self.view=view
}
class giacomo:NSObject
{ @objc func action(_button:UIButton)
{
print("CIAO")
}
}
}PlaygroundPage.current.liveView = MyViewController()
您已经在addTarget函数中将目标参数指定为self。但是给定的选择器函数不在同一类中。因此目标应该是您的giac变量。对于选择器,您应该给ClassName.methodname,这里是giacomo.action(_button :)。还有一个问题是您在viewDidLoad函数内部创建了变量giac。因此,它的作用域将终止于函数本身内部,因此不会调用目标选择器。因此,giac变量应该是MyViewController的字段。更新后的代码将如下所示。
import UIKit
import PlaygroundSupport
class MyViewController: UIViewController {
var giac=giacomo()
override func viewDidLoad() {
super.viewDidLoad()
let view=UIView()
view.backgroundColor = .white
let button = UIButton()
button.frame = CGRect(x:0,y:0, width:50, height: 50)
button.tintColor = .red
button.backgroundColor = .black
button.setTitle("Test",for: .normal)
button.addTarget(giac, action: #selector(giacomo.action(_button:)), for: .touchUpInside)
view.addSubview(button)
self.view=view
}
class giacomo:NSObject
{ @objc func action(_button:UIButton)
{
print("CIAO")
}
}
}
PlaygroundPage.current.liveView=MyViewController()
希望有帮助。如果您认为答案有帮助,请接受并认可答案。干杯。