访问 Assets 文件夹中的内部文件夹

Posted

技术标签:

【中文标题】访问 Assets 文件夹中的内部文件夹【英文标题】:Accessing inner folders in Assets folder 【发布时间】:2020-02-05 10:06:18 【问题描述】:

我的Assets.xcassets 文件夹中有以下文件夹

screenshot of the error - sorry, i dont have enough rep to show the image

我正在尝试访问ca 文件夹,然后是payments,然后是里面的图像以填充UICollectionViewCell。为了测试,我强制拆开它(我知道它不安全):

let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CellId, for: indexPath) as! MyCollectionViewCell

cell.paymentImageView.image = UIImage(named: "logos/ca/payments/x.png")!
return cell

我遇到了崩溃,上面写着:

致命错误:在展开可选值时意外发现 nil:文件

我不确定它为什么会崩溃,文件在那里。对于每个国家/地区的不同文件夹中都有多个重复的文件名,这是一个问题吗?即 xyz.png 也可能在 ca/payments 和 de/payments 中

【问题讨论】:

尝试删除路径logos/ca/payments/只放imageName.png 【参考方案1】:

此崩溃是因为您尝试强制展开可选值。

UIImage(named: "logos/ca/payments/x.png") 是可选值。如果您的项目中不存在图像,则该图像为零。

我们在获取图片时不需要放置路径,只需要图片名称和扩展文件,如UIImage(named: "x.png")

cell.paymentImageView.image 也可以接受 nil 图像。所以这条线只有cell.paymentImageView.image = UIImage(named: "x.png") 可以。

希望对您有所帮助!

【讨论】:

我明白了!谢谢解释【参考方案2】:

图像不需要完整路径。仅使用名称(如果您直接添加图像)

cell.paymentImageView.image = UIImage(named: "x.png")!

如果您使用的是 .xcassets。使用图像集的名称而不是单个图像

cell.paymentImageView.image = UIImage(named: "<IMAGE_SET_NAME>")!

【讨论】:

以上是关于访问 Assets 文件夹中的内部文件夹的主要内容,如果未能解决你的问题,请参考以下文章

手机内部文件存储——assets目录

以编程方式访问 TVOS 的 Assets 文件夹中的文件/文件夹

CORS 错误。无法从 index.html 访问父目录中的 assets 文件夹

安卓json数据保存到assets

如何得到android项目assets目录中的内容?

无法访问 CodeIgniter 资产文件夹中的 CSS 文件,显示 404 错误