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

Loading image from xcassets causes assertion failure

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

文档明确指出

Returns

An object containing an unconfigured version of the image, or nil if the method could not find the specified image.

有谁知道发生了什么或者为什么应用程序崩溃而不是返回 nil

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

意思是 UIColor(named: "default-logo")UIImage(named: "default-logo") 将导致应用程序崩溃,即使这两个资源都存在并且在 xcassets 文件夹中有效。

这些资产的名称需要是唯一的。