微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 UserDefaults 检索图像

如何解决从 UserDefaults 检索图像

当我使用我的应用程序并检索它时,我能够成功地将我的图像保存在用户认值中,但是我无法弄清楚如何通过 init() 以简单的方式检索它。在我的示例中,它将返回 AppValue.avatar(我的认图像)但不会返回存储的图像。它找不到以前存储的图像,因此它替换了我的认图像,但失败了,因为我在已发布的变量中有 UIImage。我认为它必须作为数据进行检索,但如果我将 init() 中的 UIImage 更改为数据,Xcode 会不满意。

class UserSettings: ObservableObject {
    @Published var avatar: UIImage {
        didSet {
            /// Convert to data using .pngData() on the image so it will store.  It won't take the UIImage straight up.
            let pngRepresentation = avatar.pngData()
            UserDefaults.standard.set(pngRepresentation,forKey: "avatar")
            printSave(forKey: "avatar",value: avatar)
        }
    }
    init() {
        self.avatar = UserDefaults.standard.object(forKey: "avatar") as? UIImage ?? AppValue.avatar 
    }

}

解决方法

这只是在心理上跟踪事物是什么类型的问题。

您将图像保存为其 pngData(正确)。这不是 UIImage;它是一个数据。您保存的 pngRepresentation 是数据。

因此,当您检索图像并说 as? UIImage 时,该测试失败。它不是 UIImage。这是一个数据。

因此,获取 data(forKey:)(或说 as? Data 而不是 as? UIImage)。现在你有了数据。然后调用 UIImage.init(data:) 来检索图像。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。