从xcassets加载图像会导致断言失败

时间:2020-02-20 09:58:26

标签: ios swift xcasset

我正在使用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吗?

1 个答案:

答案 0 :(得分:0)

毕竟,该问题与xcassets文件夹有关。我的文件夹中也有一些颜色,与图片的名称相同。

意味着UIColor(named: "default-logo")UIImage(named: "default-logo")会导致应用程序崩溃,即使xcassets文件夹中同时存在两个资源并且它们都有效。

这些资产的名称必须唯一。