我对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中。我试图在图片资产中指定它,但我还在尝试同样的问题。是否指定扩展名也无济于事。
如果您愿意,我可以提供更多代码段。
答案 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}}方法,但没有调用父方法。问题解决了。