带按钮检测的NSInvalidArgumentException

时间:2016-04-20 14:56:33

标签: ios swift exception uibutton

该应用程序有一个屏幕,在给出输入后,我点击OK按钮,它应该执行输入验证,如果正常,然后导航并通过协议/委托将数据传回上一个屏幕,否则,阻止导航和显示警告弹出窗口。

这是我的viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()

    button.addTarget(self, action: "pushView:", forControlEvents: .TouchUpInside)
}

这是pushView()函数:

func pushView() {
    //some codes to validate data and perform navigation
}

当我在模拟器中运行应用程序时,当我点击按钮时它会崩溃,这是错误消息:

2016-04-21 00:12:39.976 ToDo List[1795:1253192] -
[ToDo_List.AddReminderController pushView:]:
unrecognized selector sent to instance 0x7fa13ac16c40
2016-04-21 00:12:39.981 ToDo List[1795:1253192]
*** Terminating app due to uncaught exception
'NSInvalidArgumentException', reason: '-
[ToDo_List.AddReminderController pushView:]:
unrecognized selector sent to instance 0x7fa13ac16c40'

发件人或选择器可能存在问题,但我不知道它究竟意味着什么。

2 个答案:

答案 0 :(得分:0)

修复选择器:

button.addTarget(self, action: "pushView", forControlEvents: .TouchUpInside)

为了将来记住,最新的swift 2.2语法在这方面有一些不同。

button.addTarget(self, action: #selector(MyClass.pushView), forControlEvents: .TouchUpInside)

答案 1 :(得分:0)

当您在选择器/操作名称中添加:时,就像您在这里一样:

button.addTarget(self, action: "pushView:", forControlEvents: .TouchUpInside)

这意味着你的选择器需要一个参数。

另一方面,pushView()函数不包含任何参数,因此对于iOS / UIKit,您引用了两个不同的东西。

解决方案是:

  • 从您的:中移除action,如此:

button.addTarget(self, action: "pushView", forControlEvents: .TouchUpInside)

  • 或向pushView()函数添加参数,如下所示:

func pushView(sender: AnyObject)