如何获取.xcassets文件中的图片URL用于UNNotificationAttachment?
解决方案
存放在.xcassets中的图片资源会被编译到统一的Assets.car文件中,没有独立的文件路径,无法直接获取对应URL,需要先导出到沙盒临时目录后再使用,具体实现步骤如下:
- 从
.xcassets中读取图片并转换为二进制数据
// 替换为你的xcassets内图片名 guard let image = UIImage(named: "notice_image"), let imageData = image.pngData() else { return }
- 将二进制数据写入沙盒临时目录生成独立文件
let tempDir = FileManager.default.temporaryDirectory // 自定义文件名,注意带对应后缀 let attachmentURL = tempDir.appendingPathComponent("notice_attachment.png") do { try imageData.write(to: attachmentURL) } catch { print("写入附件失败: \(error)") return }
- 用临时文件URL创建
UNNotificationAttachment
do { let attachment = try UNNotificationAttachment( identifier: "notice_image_attachment", url: attachmentURL, options: nil ) // 把attachment添加到你的UNMutableNotificationContent的attachments数组中 // content.attachments = [attachment] } catch { print("创建通知附件失败: \(error)") }
优化提示:如果同一张图片需要多次作为通知附件使用,可以先判断临时目录下的对应文件是否存在,存在则直接复用URL,避免重复写入浪费性能。
内容的提问来源于stack exchange,提问作者cHorse1981
相关产品推荐
相关产品推荐

