NSAlert按钮无法识别的选择器发送到实例

时间:2018-09-05 21:59:42

标签: swift macos cocoa

我有一堂课,其中大部分逻辑都是针对点击等处理的。在那里,我创建了一个函数,该函数在不同的类中调用另一个函数。我想将此功能与NSAlert的按钮单击联系在一起。但是,单击时出现错误:无法识别的选择器发送到实例0x6000001c50a0。我还要检查警报是否打开,并且所有警报都以类似的方式进行。

这是我的代码:

func goBack()
{
//goback code
}


func showAlert(){
if (!OtherClass.alertCheck)
{
OtherClass.alertCheck = true;
DispatchQueue.main.async(){
var alert = NSAlert()
alert.messageText = "If you want to go back, click back."
var btn = alert.addButton("back")
btn.action = #selector(OtherClass.goBack)
alert.runModal()
OtherClass.alertCheck = false
}
}
}

即使我不通过dispatchQueue,也不会触发该动作。我想知道为什么在两种情况下都行不通。

2 个答案:

答案 0 :(得分:1)

问题在于那不是您使用NSAlert的按钮的方式。不要为按钮设置任何操作。该按钮将关闭警报,此时您可以查看单击了什么按钮并做出相应的响应。您可以通过捕获runModal的结果来做到这一点,而您的代码将忽略该结果。当然,如果此警报只有一个按钮,则无需检查任何内容。只需在下一行调用goBack

答案 1 :(得分:0)

可能是从OtherClass类调用的函数“ goBack”,该函数试图从OtherClass中获取尚未创建为对象的某些属性?