You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

IBAction触发异常原因:按钮连线后点击报SIGABRT崩溃

排查按钮连线后点击崩溃(SIGABRT)的常见原因

先看你遇到的问题和代码:

点击按钮时应用持续崩溃,报错信息为:(Thread 1: signal SIGABRT)

你的代码片段:

import UIKit
class LoginViewController: UIViewController {
    @IBAction func btnActionLogin(_ sender: Any?) {
        print("Why is this error?")
    }
}

这种情况我日常开发中碰到好多次了,大概率是Storyboard和代码的连线环节出了隐性问题,给你列几个最容易踩坑的排查方向:

  • 重复/无效连线残留:右键点击Storyboard里的登录按钮,打开Connections Inspector(右侧面板的箭头图标),看看Sent Events里的Touch Up Inside是不是关联了多个btnActionLogin方法,或者有没有显示灰色的无效连线(比如方法已经删除但连线还在)。如果有,直接删掉多余的或者无效的连线即可。

  • ViewController类名不匹配:检查Storyboard中这个控制器的Custom Class设置——选中控制器的View,然后在Identity Inspector里确认Class是LoginViewController,而且Module要选对(如果是多模块项目的话)。有时候手滑选成别的类,或者代码里改了类名但Storyboard没同步,就会导致找不到对应的IBAction方法。

  • 方法签名不兼容:虽然你代码里的sender: Any?兼容所有控件类型,但如果之前修改过这个方法的签名(比如原来写的是sender: UIButton),旧的连线可能没同步更新,导致运行时找不到匹配的方法。这种情况最简单的解决方式是:先删掉按钮上的现有连线,然后重新从按钮拖拽到代码里生成IBAction。

  • 控制器实例重复创建:如果你的代码里手动初始化了LoginViewController(比如用init(nibName:bundle:)),但同时Storyboard里的这个控制器又是通过segue或者其他方式加载的,可能会出现连线绑定的实例和实际运行的实例不是同一个的情况。检查下你跳转/加载这个控制器的代码,确保是从Storyboard正确实例化的(比如用storyboard?.instantiateViewController(withIdentifier:))。

按照上面的步骤排查,基本都能解决这个SIGABRT崩溃问题~

内容的提问来源于stack exchange,提问作者user3390652

火山引擎 最新活动