从 Assets.xcassets 加载图像时 iOS 应用程序崩溃

Posted

技术标签:

【中文标题】从 Assets.xcassets 加载图像时 iOS 应用程序崩溃【英文标题】:iOS App Crashes while loading image from Assets.xcassets 【发布时间】:2017-06-12 06:33:00 【问题描述】:

在名为“5”的 Assets.xcassets 中有一个名为“5.jpg”的图像文件。

我编写了代码UIImage *image = [UIImage imageNamed:@"5"]; 来创建图像,但应用程序崩溃并在控制台中输出*** Assertion failure in -[_CUIThemePixelRendition _initWithCSIHeader:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/CoreUI/CoreUI-432.4/CoreTheme/ThemeStorage/CUIThemeRendition.m:3797

【问题讨论】:

您没有收到编译器错误吗????字符串图像名称的开头缺少@ 必须是该图像中使 CUIThemeRendition 从 CoreUI 崩溃的东西。更改图像,看看它是否仍然崩溃。如果没有,您应该为此向 Apple 提交错误报告 (rdar)。这是哪个 ios 版本发生的? 【参考方案1】:

我在运行 iOS 10 或更低版本的 XCode 9 测试版中遇到了这个问题。 Apple 似乎已经放弃了对 XCAssets 中 JPEG 文件的支持。您可以按照@Esha 的建议使用 do 并切换到 PNG,或者您不能使用 XCAsset,将图像放在本地目录中,并通过其 URL 引用它。

这可能是 Apple 故意这样做的(尽管如果他们这样做了,我找不到任何文档)或者这是一个 XCode 9 错误。我已经向苹果报告了,你可以跟踪bug的进度here.

【讨论】:

我想是的,我在 Xcode 9 中也遇到了这个问题,我必须使用 .png 而不是 .jpg,或者在 Xcode 8 中运行它。【参考方案2】:

尝试将 .png 图像放入资产文件夹。 jpg 图像会导致此问题。

【讨论】:

这是否意味着 jpg 不能再出现在 xcasset 中了?【参考方案3】:

该行应该是

UIImage *image = [UIImage imageNamed:@"5.jpg"];

如果文件是 PNG 格式,则无需指定 .PNG 文件扩展名。在 iOS 4 之前,您必须指定文件扩展名。

来自Apple Documentation

建议您对应用中的大多数图像使用 PNG 或 JPEG 文件。图像对象针对读取和显示这两种格式进行了优化,并且这些格式提供了比大多数其他图像格式更好的性能。由于 PNG 格式是无损的,因此特别推荐您在应用界面中使用的图像。

【讨论】:

以上是关于从 Assets.xcassets 加载图像时 iOS 应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

从 Xcode Swift 中 Assets.xcassets 中的文件夹访问图像

ARKit 图像检测和从 Assets.xcassets 添加图像

Assets.xcassets - 通用不工作

使用“Assets.xcassets”中的图像文件以编程方式更改 iOS 应用程序图标

Assets.xcassets 应用

Cocoapods:包含资源文件夹 Assets.xcassets 的 pod 出现问题