gpt4 book ai didi

ios - 以编程方式将目标添加到按钮会引发错误 "unrecognized selector sent to class"

转载 作者:搜寻专家 更新时间:2023-11-01 05:55:06 25 4
gpt4 key购买 nike

不确定为什么当我尝试使用我在代码中创建的按钮时收到“无法识别的选择器发送到类”错误。

这是我的代码:

let sendButton: UIButton = {
let button = UIButton(type: .system)
button.setTitle("Send", for: .normal)
button.setTitleColor(UIColor.white, for: .normal)
button.backgroundColor = #colorLiteral(red: 0.5098039216, green: 0.5215686275, blue: 0.8392156863, alpha: 1)
button.layer.cornerRadius = 5
button.isUserInteractionEnabled = true
button.addTarget(self, action: #selector(postComment), for: .touchUpInside)
return button
}()

最佳答案

其实一切都是时间问题。您正在声明一个实例属性以及一个初始化该属性的定义和调用函数,然后您继续在该函数中说 button.addTarget(self... 。那么问题是:什么时候该函数的代码会运行吗?令人难以置信的是,这非常重要,以至于它实际上改变了 self 的含义。

当您使用 let 进行此声明时,代码会在实例尚不存在时运行。实例正是我们在那一刻正在形成的过程中;它还没有“煮熟”。事实上,您不知道的是,self 在那一刻意味着 UIButton 类! 因此生成的目标操作是无效的;你没有类方法 postComment;这是一个实例方法(正确)。所以稍后当您点击按钮并且我们尝试对全类说 postComment 时,我们崩溃了。 “无法识别的选择器已发送到类”,正如您所说。

另一方面,当你说 lazy var 时,直到实例 self 确实存在之后才会调用代码,self 意味着实例,一切正常。

对于初学者和非初学者来说,这非常令人困惑;即使在指出问题之后,我自己也犯了完全相同的错误。在我看来,编译器应该捕获这个并阻止你,但它没有。我已经提交了一个错误:http://bugs.swift.org/browse/SR-4865

关于ios - 以编程方式将目标添加到按钮会引发错误 "unrecognized selector sent to class",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50662302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com