当前位置: 首页 > 面试题库 >

iOS无法识别的选择器已发送到Swift中的实例

陶山
2023-03-14
问题内容

我在尝试让用户按下UIButton时遇到问题。我不断收到错误消息:无法识别的选择器已发送到实例

override func viewDidLoad() {
    super.viewDidLoad()

    button.addTarget(self, action: "buttonClick", forControlEvents: UIControlEvents.TouchUpInside)
    button.setTitle("Print", forState: UIControlState.Normal)
    button.font = UIFont(name: "Avenir Next", size: 14)
    button.backgroundColor = UIColor.lightGrayColor()
    self.view.addSubview(button)
}

func buttonClick(Sender: UIButton!)
{
    myLabelInfo.text = "Hello"
}

对于Swift方法,例如funcbuttonClick(Sender:UIButton)传递给addTarget选择器方法的正确字符串是什么?是“ buttonClick”,“ buttonClick:”,“
buttonClickSender:”还是其他?


问题答案:

您正在对该操作使用无效的方法签名。您正在提供buttonClick,但该方法有一个参数,因此签名应为buttonClick:

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

有关如何设置选择器格式的更多信息,您可以参考下面链接中所接受的答案。这篇文章中使用的代码可能是Objective-C,但其所有课程也可以在这里应用。

另外请注意,如果您将此代码用作Selector("buttonClicked:")操作,则此代码也将有效,但不必这样做,因为可以将字符串文字隐式转换为Selector类型。

引用Swift与Cocoa和Objective-C一起使用

一个Objective-C选择器是一种引用Objective-C方法名称的类型。在Swift中,Objective-
C选择器由Selector结构表示。您可以使用字符串文字构造选择器,例如let mySelector:Selector =“
tappedButton:”。由于字符串文字可以自动转换为选择器,因此您可以将字符串文字传递给任何接受选择器的方法。



 类似资料:
  • 问题内容: 我正在尝试从字典中获取特定键的值,但我得到了一个[[__NSCFArray objectForKey:]:无法识别的选择器发送到实例” 我NSLog我的头像字典,我的结果是: 问题答案: 问题是您没有。的计数为1,并包含。 要遍历数组中的所有项目,请枚举数组。 注意:我也从[]语法切换到了。我比较喜欢

  • 问题内容: 我看不到以下按钮为何引发错误:2014-08-13 00:29:57.674 view1 [26581:842344]-[view1.ViewController buttonAction:]:无法识别的选择器已发送至实例0x797731c0 2014-08-13 00:29:57.677 view1 [26581:842344] * 由于未捕获的异常’NSInvalidArgumen

  • 问题内容: 每当我尝试更新核心数据模型的值时,我都会不断收到此错误。这是我的模特 这是我的代码tableViewCell 我不断收到错误消息 “由于未捕获的异常’NSInvalidArgumentException’而终止应用程序,原因:’-[Habit setTrackingType:]:无法识别的选择器发送到实例0x7fdcbb002c90’” 在self.habit?.trackingTyp

  • 问题内容: 我已经以编程方式创建了并添加到其中: 但是当我触摸视图时,Xcode抛出错误: 2016-07-13 09:24:29.918 Draft_Hypa_02 [661:83024]-[Draft_Hypa_02.ViewController handleTap:]:无法识别的选择器已发送到实例0x17d94a10 2016-07-13 09:24:29.921 Draft_Hypa_02

  • 问题内容: 我试图在所有符合协议的UIViewControllers中添加点按功能。 以下是我的做法: 点击屏幕时,结果如下: 我了解此错误,但不知道如何解决。谁能建议如何做到这一点? 问题答案: 问题在于,Objective-C不了解协议扩展。因此,您不能使用协议扩展将方法注入到类中,而Objective- C的消息传递机制可以看到该方法。您需要在视图控制器类 本身中 声明。 (我意识到这正是您

  • 问题内容: 我得到我的iOS应用程序错误。我尝试根据其他类似主题中提到的答案解决问题,但失败了。请查看下面的代码,并为此提供帮助。 谢谢 问题答案: 这样写选择器。 Swift 2.3或更低版本。 迅捷3 注意: 一种建议是面糊方法名称始终以小写而不是大写开头。因此,如果您使用而不是,那就更糟了。