You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Segue回退时应用崩溃求助:Thread 1: signal SIGABRT

解决Unwind Segue时的SIGABRT崩溃问题

问题根源

崩溃的核心原因是:执行unwind segue时,segue.destination指向的是你要返回的目标控制器(即最初发起跳转的那个控制器),而不是BMI_Result。这时候用as!强制类型转换会因为类型不匹配直接触发崩溃。

解决方案

方法1:通过Segue标识符区分逻辑

给跳转到BMI_Result的segue设置唯一标识符(在Storyboard里选中segue,在属性面板设置Identifier为ToBMIResultSegue),然后在prepare(for:sender:)里只处理对应标识符的segue:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // 仅处理跳转到BMI_Result的segue
    guard segue.identifier == "ToBMIResultSegue" else { return }
    
    // 用as?安全转换,避免强制转换失败
    guard let bmiResultVC = segue.destination as? BMI_Result else {
        print("无法转换为BMI_Result控制器")
        return
    }
    
    if let text = result3Label.text {
        bmiResultVC.text = text
    }
}

方法2:直接判断目标控制器类型

如果不想设置标识符,也可以直接判断segue.destination的类型,仅在匹配时执行传值逻辑:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // 仅当目标是BMI_Result时执行传值
    if let bmiResultVC = segue.destination as? BMI_Result {
        if let text = result3Label.text {
            bmiResultVC.text = text
        }
    }
    // unwind segue等其他类型的segue会自动跳过这段代码
}

额外提示

  • 永远避免在不确定类型的情况下使用as!强制转换,优先用as?配合guard或if let做安全转换,即使转换失败也不会导致应用崩溃,还能添加日志排查问题。
  • 检查Storyboard里的unwind segue是否正确关联:确保unwind的目标是正确的控制器,且没有误将其他segue的逻辑混在一起。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:00:59