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

Swift应用因EXC_BAD_INSTRUCTION错误崩溃求助

解决测验应用最后一题选答后崩溃的问题

首先,崩溃的核心原因非常明确:你在代码里强制解包了selectedAnswerIndex这个可选值(question.selectedAnswerIndex!),当这个值为nil时,Swift会直接触发运行时崩溃。之前版本正常现在突然出问题,说明最后一题的selectedAnswerIndex没有被正确赋值,大概率是这一题的逻辑存在特殊遗漏或异常。

可能的触发场景

  • 最后一题的赋值逻辑有遗漏:比如最后一题的答案选择按钮没正确绑定赋值代码,或者存在特殊条件判断(比如只有满足某个隐藏条件才赋值,但用户操作没触发),导致用户选了答案但selectedAnswerIndex仍为nil。
  • 数据状态被意外重置:可能在最后一题选答后、计算得分前,有其他代码(比如页面跳转、状态重置逻辑)把最后一题的selectedAnswerIndex改成了nil。
  • 快速操作导致状态未同步:如果答案选择是异步处理的(比如依赖网络请求更新状态),可能计算得分的代码先执行了,此时selectedAnswerIndex还没完成赋值。

修复方案&排查步骤

  1. 先替换强制解包,避免崩溃同时定位问题
    把危险的强制解包改成安全的可选绑定,同时添加日志帮你精准定位问题:

    var score = 0
    for question in QuestionController.questionsList {
        // 安全获取可选值,避免崩溃
        if let selectedIndex = question.selectedAnswerIndex {
            score += selectedIndex
        } else {
            // 打印日志,查看具体是哪一题的selectedAnswerIndex为nil
            print("❌ 问题:\(question) 未选中答案,selectedAnswerIndex为nil")
        }
    }
    

    运行后查看日志,就能确认是不是最后一题的这个值为nil。

  2. 检查最后一题的赋值逻辑
    找到最后一题答案选择的触发代码(比如按钮的IBAction或点击回调),确认每次用户选答案时,都正确给selectedAnswerIndex赋值了。比如有没有可能最后一题的选项是动态生成的,绑定逻辑被遗漏了?

  3. 排查得分计算前的状态修改
    检查在计算得分的代码之前,有没有其他操作会修改questionsList里最后一题的selectedAnswerIndex。比如是不是有重置状态的代码不小心影响了最后一题?

  4. 验证数据初始化
    确认questionsList里的最后一题在初始化时,selectedAnswerIndex的默认值是否正确(初始应为nil,用户选答后需改为非nil),有没有可能初始化时就存在异常?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:50:41