【问题标题】:Loading image from xcassets causes assertion failure从 xcassets 加载图像会导致断言失败
【发布时间】: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,它工作正常。你能具体说明一下版本吗?

标签: ios swift xcasset


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 1970-01-01
    • 2013-08-17
    • 2018-06-05
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多