EXC_BAD_ACCESS 在 Swift 中加载 UIImage 时

EXC_BAD_ACCESS when loading UIImage in Swift

我是 iOS 平台的新手,但我已经是一名试验过的 Android 开发者。

我在 Swift 中遇到了一个奇怪的问题,我们无法在 Objectice-C 中重现。我们正在手动设计我们的界面,而不使用 Interface Builder,以获得更大的灵活性。

我们在自定义 UIViewController 中提到的行上得到了一个 EXC_BAD_ACCESS。虽然这个问题似乎在 Whosebug 上被问过很多次,但我要么没有找到用 Swift 编写的解决方案,要么没有找到工作正常的解决方案和一个非常相似的问题。

override func viewDidLoad() {
    super.viewDidLoad()

    var logo:UIImage = UIImage(named: "sgLogo")! --> EXC_BAD_ACCESS
    var sgLogo:UIImageView = UIImageView(image: logo)

    // other UI elements, + constraints
    [...]
}

我得到的唯一元素是堆栈跟踪,下方栏中的调试器视图 Xcode 是空的。根据该堆栈跟踪,UIImage 似乎已实例化:存在内存地址。

sgLogo 图像是位于项目文件夹结构中的 png 图像,而不是 Images.xcassets。我试图在图像资产中指定它,但我仍在尝试同样的问题。是否指定扩展名也无济于事。

如果你愿意,我可以提供更多代码片段。

好像找不到你的图片。检查图片的目标。现在您可以通过删除感叹号来解决问题。如果您像这样强制解包并且图像不存在,您的应用程序将会崩溃。所以你可以这样做:

override func viewDidLoad() {
    super.viewDidLoad()

    var logo = UIImage(named: "sgLogo") 
    if let logo = logo { 
        let imgView = UIImageView(image: logo) 
    } else { 
        //image is nil 
    }

    // other UI elements, + constraints
    [...]
}

我成功解决了这个问题。我重写了 UIViewControllerloadView 方法,但没有调用父方法。问题已解决。