在 swift 3 上的按钮单击应用程序是与故事板绑定的崩溃

Posted

技术标签:

【中文标题】在 swift 3 上的按钮单击应用程序是与故事板绑定的崩溃【英文标题】:in swift 3 on button click application is crash which bind with story board 【发布时间】:2016-09-28 05:58:11 【问题描述】:

我在 Swift 2.2 中开发了一个项目,在 Swift 3 启动后,我需要在 Swift 3 中转换它并使其可与 ios 10 编译。但是在转换项目后,我遇到了一些问题,例如当我单击与情节提要连接的按钮时我的应用程序崩溃了,原因是 unrecognized selector sent to instance 。它在 swift 2.2 中工作,我没有改变任何东西。

 @IBAction func btnTwitter_Clicked(sender:UIButton)
         
              if checkInternetConnection()
              
                    SINGLETON.startLoadingActivity(self.view);
                    let objLocationTracker = LocationTracker.sharedInstance
                    objLocationTracker.fetchCurrentLocation( (objLocation) -> (Void) in
                        SINGLETON.stopLoadingActivity(self.view)
                        self.loginWithTwitter(objLocation: objLocation)
                        )
              
              else
              
                 SINGLETON.toast(read_Localizable("noInternet"),view: self.view)
              
         

【问题讨论】:

我注意到您在 IBAction 之前放置了两个“@”符号。这只是一个错字还是在您的代码中也一样?请检查您的代码并删除多余的“@”。也许这是导致问题的原因 @ShayanJalil 这个错误在 copr 粘贴中出现,它不在代码中 为什么要投反对票?我认为这不是无关紧要的问题,有很多人面临这个问题,因此对此没有任何帮助。至少给出一个理由 我没有投反对票,但这可能是因为您没有分享完整的错误消息。 “无法识别的选择器”部分告诉您错误的类型,但完整的错误消息告诉我们发生错误的哪个选择器和对象类型。下次,分享完整的错误信息。此外,鉴于问题很容易出现在选择器中,您也应该共享这部分代码。您向我们展示了选择器调用的方法,但没有向我们展示问题的根源,例如你在哪里打电话给addTarget 或者你有什么。 @Rob 感谢您的评论,下次我会处理这个问题 【参考方案1】:

看到这个

@@IBAction func btnTwitter_Clicked(sender:UIButton) 您在按钮前面添加了额外的 @,检查一次,

在 swift3 中我们需要像这样编写按钮动作

yourbuttonName.addTarget(self, action: #selector(yourVCName. btnTwitter_Clicked(_:)), for: .touchUpInside)

和调用方法一样

@IBAction func btnTwitter_Clicked(_ sender: UIButton)
   print("Button pressed ? ")
  // continue your work

 

或删除按钮 Outlets 和 IBActions 并重新生成一次,肯定有效

【讨论】:

感谢您的回答,但@@ 是复制粘贴错误,它不在代码中 所以我需要转换所有与情节提要连接的按钮选择器吗? @chiragshah - 绝对,只需删除连接并重新生成一次肯定有效【参考方案2】:

只需从情节提要中的连接检查器中删除所有 Outlets 和 IBAction,然后再次添加它们。之后一切都应该正常

【讨论】:

【参考方案3】:

如果您以编程方式向按钮添加操作,您的选择器语法类似于#selector(btnTwitter_Clicked(_:)),这不适用于从 Swift 3 开始的 Swift 3,您需要指定第一个参数名称,因此在您的第一个参数名称中添加 _像func btnTwitter_Clicked(_ sender: UIButton) 这样的方法或像这样更改选择器语法,其中之一将解决您的崩溃问题。

 #selector(btnTwitter_Clicked(sender:)) 

【讨论】:

感谢您的回答让我试试这个 你节省了我的一天,这正在工作,所以我需要转换与情节提要连接的所有按钮选择器对吗? 是的,很乐意提供帮助:)

以上是关于在 swift 3 上的按钮单击应用程序是与故事板绑定的崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Swift 4 Odd 意外跳回之前的故事板

Swift 3 - 表 VC(使用 coredata)和细节 VC 的故事板设计 *从默认信息的细节 VC 开始*

如何从 xcode 故事板上的导航控制器导航回来

如何通过单击 iPhone 故事板中的 ActionSheet 按钮移动到下一个 viewController

如何将边框添加到从 Swift 2.1 中的故事板链接的 @IBAction 按钮?

如何在 ios swift 中使用故事板平均划分按钮图像?