在Swift中加载UIImage时的EXC_BAD_ACCESS

时间:2015-05-07 10:08:06

标签: ios swift uiimage exc-bad-access

我对iOS平台很陌生,但我已经是一个经过实验的Android开发者。

我在Swift中遇到了一个奇怪的问题,我们无法在Objectice-C中重现。我们在不使用Interface Builder的情况下手动设计接口,以提供更大的灵活性。

我们在自定义UIViewController中提到的行上有一个EXC_BAD_ACCESS。虽然StackOverflow上似乎多次提出这个问题,但我还是找不到用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中。我试图在图片资产中指定它,但我还在尝试同样的问题。是否指定扩展名也无济于事。

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

2 个答案:

答案 0 :(得分:0)

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

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
    [...]
}

答案 1 :(得分:0)

我成功地解决了这个问题。我覆盖了loadView的{​​{1}}方法,但没有调用父方法。问题解决了。