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

iOS开发:Thread 1: EXC_BAD_INSTRUCTION错误及数组无值问题修复求助

修复Thread 1: EXC_BAD_INSTRUCTION崩溃问题

问题根源

崩溃发生在Hero实例初始化时,核心原因是#imageLiteral(resourceName:)无法找到指定的图片资源,导致UIImage初始化返回nil,而#imageLiteral会隐式强制解包nil值,触发EXC_BAD_INSTRUCTION运行时错误。

修复方案

1. 验证图片资源的存在性与正确性

  • 确认项目中包含所有代码中指定的图片文件(如abc.jpg、abca.jpg等),且这些文件已勾选当前target的Target Membership(在Xcode中选中文件,查看右侧面板的对应选项)。
  • 严格核对文件名:iOS资源文件名区分大小写,且不能有拼写错误(比如Abc.jpg和abc.jpg是不同资源)。

2. 替换为安全的UIImage初始化方式

避免#imageLiteral的隐式强制解包,改用可选型初始化,即使资源缺失也不会崩溃,还能快速定位问题:

import UIKit

struct Hero {
    let name: String
    let image: UIImage?
    let type: String
    let skinimage: [UIImage?]
    // let intro: String
}

var heros: [Hero] = [ 
    Hero(name: "abc", image: UIImage(named: "abc.jpg"), type: "red", skinimage: [UIImage(named: "abca.jpg")]),
    Hero(name: "aaa", image: UIImage(named: "aaa.jpg"), type: "blue", skinimage: [UIImage(named: "aaaa.jpg")]),
    Hero(name: "123", image: UIImage(named: "123.jpg"), type: "green", skinimage: [UIImage(named: "123a.jpg")]),
    Hero(name: "456", image: UIImage(named: "456.jpg"), type: "red", skinimage: [UIImage(named: "456a.jpg")])
]
  • 将image和skinimage的类型改为UIImage?(可选型),使用UIImage(named:)初始化,找不到资源时会返回nil而非崩溃。
  • 后续可以通过检查heros数组中哪些实例的image或skinimage元素为nil,快速定位缺失的资源。

3. 针对Assets.xcassets管理的资源调整

如果图片是在Assets.xcassets中管理的,初始化时不需要添加文件后缀(如.jpg),直接使用Assets中的命名即可,例如:

UIImage(named: "abc") // 而非"abc.jpg"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:37:26