有没有比这更好的方法在通知附件中使用来自 Assets.xcassets 的图像?

aes*_*abs 5 ios swift

我想将 Assets.xcassets 中的图像附加到通知中。我一直在寻找解决方案大约一个小时,这似乎是唯一的方法:

func createLocalUrl(forImageNamed name: String) -> URL? {

let fileManager = FileManager.default
let cacheDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0]
let url = cacheDirectory.appendingPathComponent("\(name).png")

guard fileManager.fileExists(atPath: url.path) else {
    guard
        let image = UIImage(named: name),
        let data = UIImagePNGRepresentation(image)
        else { return nil }

    fileManager.createFile(atPath: url.path, contents: data, attributes: nil)
    return url
}

return url
}
Run Code Online (Sandbox Code Playgroud)

来源:我可以从 XCAssets 包中获取 NSURL 吗?

这似乎有点矫枉过正。但是,据我所知,这是获取可以使用的 URL 的唯一方法:

let imageURL = createLocalUrl(forImageNamed: "TestImage")

let attachment = try! UNNotificationAttachment(identifier: "image", url: imageURL!, options: [:])
        content.attachments = [attachment]
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法将 Assets.xcassets 中的图像添加到本地通知?(是的,我知道我可以在 Assets 之外存储图像并使用 Bundle.main.etc)

Alb*_*ops 2

也可以这样做:

extension UIImage {
    func getURL() -> URL? {
         guard let base64Image = pngData()?.base64EncodedString() else { return nil }
         return URL(string: "data:image/png;base64,\(base64Image)")
    }
}
Run Code Online (Sandbox Code Playgroud)

并称其为:

 let imageURL = UIImage(named: "TestImage")?.getURL()

 let attachment = try! UNNotificationAttachment(identifier: "image", url: imageURL!, options: [:])
    content.attachments = [attachment]
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是这对我不起作用。尝试创建附件时出现错误:“无法识别的附件文件类型”。 (2认同)