gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:02:08 27 4
gpt4 key购买 nike

我想将 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
}

来源:Can I get a NSURL from an XCAssets bundle?

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

let imageURL = createLocalUrl(forImageNamed: "TestImage")

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

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

最佳答案

我知道这是个老问题,但我稍微改进了你的解决方案,也许有人会用它

extension UIImage {
func createLocalURL() -> URL? {
guard let imageName = self.accessibilityIdentifier else {
return nil
}

let fileManager = FileManager.default
guard let cacheDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask).first else {
return nil
}
let url = cacheDirectory.appendingPathComponent("\(imageName).png")

guard fileManager.fileExists(atPath: url.path) else {
guard let data = self.pngData() else { return nil }
fileManager.createFile(atPath: url.path, contents: data, attributes: nil)
return url
}

return url
}
}

类里面想用的时候

func createImageAttachment(image: UIImage?) -> [UNNotificationAttachment] {
var notificationAttachment: [UNNotificationAttachment] = []
if let image = image,
let imageUrl = image.createLocalURL(),
let attachment = try? UNNotificationAttachment(identifier: "image", url: imageUrl, options: nil) {

notificationAttachment.append(attachment)
}

return notificationAttachment
}

并在通知中添加图片

let image = UIImage(named: "TestImage")
content = createImageAttachment(image: image)

这样比较安全

关于ios - 在通知附件中使用来自 Assets.xcassets 的图像是否有比这更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51488589/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com