【发布时间】:2020-06-04 14:52:12
【问题描述】:
我正在使用 xcassets 文件夹来存储主题图像。对于默认主题,图像始终存在于 xcassets 中,但对于其他主题,图像是可选的,这将导致使用默认图像。
伪代码:
struct ThemeImage {
static let standard = UIImage(named: "default-logo")!
static func themedImage(for theme: String) -> UIImage {
return UIImage(named: "\(theme)-logo") ?? ThemeImage.standard
}
}
现在,当我尝试为某个主题加载图片,但该资源不存在时,应用会立即崩溃,并报告以下错误:
*** Assertion failure in -[_UIImageCGImageContent initWithCGImage:scale:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3901.4.2/_UIImageContent.m:336
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Need an imageRef'
文档明确说明
返回
一个包含未配置版本的图像的对象,如果方法找不到指定的图像,则为 nil。
有谁知道发生了什么或者为什么应用程序崩溃而不是返回nil?
【问题讨论】:
-
您是否检查过
UIImage(named: "default-logo")不是nil? -
是的,默认图片加载正确并且是有效图片,即不是
nil -
@Craz1k0ek 您的代码块似乎没问题,预计可以在这里工作。您能否确认您是如何访问此 ThemeImage 的?
-
@RJ168 是的,与此同时,我创建了另一个项目,它似乎可以工作。我想在 xcassets 设置中发生了一些可疑的事情。仅在我刚刚测试过的 iOS 13 上发生
-
@Craz1k0ek 我刚刚检查了 13.3.1,它工作正常。你能具体说明一下版本吗?