【问题标题】:how to save UIImage to UserDefaults in swift 5如何在 swift 5 中将 UIImage 保存到 UserDefaults
【发布时间】:2021-06-08 11:25:43
【问题描述】:

我正在尝试将用户图像保存到 userDefaults,但我总是收到错误“线程 1:“尝试插入非属性列表对象(函数)用于键保存图像”这是我的代码

import UIKit

class productSelectionPage: UIViewController {
    @IBOutlet weak var productImageView: UIImageView!


    override func viewDidLoad() {
        super.viewDidLoad()

        // Save image
        let image = UIImage(named: "user")
        let imageData = UIImage.jpegData(image)
        UserDefaults.standard.setValue(imageData, forKey: "savedImage")

    }
    @IBAction func offerButtonTapped(_ sender: UIButton) {
        // present image
        let imageData = UserDefaults.standard.object(forKey: "savedImage")
        let image = UIImage(data: (imageData as! NSData) as Data)
        productImageView.image = image
        // crash

        
        
    }
    

}

【问题讨论】:

  • 不要将图像保存到 UserDefaults ...它适用于少量信息(例如设置选项)。将图像保存到本地存储。
  • 不,我需要 userDefaults 在关闭后在 vc 之间共享照片,我将重置 userDefaults。

标签: ios swift uiimage userdefaults


【解决方案1】:

尝试像这样使用 PropertyListEncoder() 和解码器:

func saveImage() {
    guard let data = UIImage(named: "image").jpegData(compressionQuality: 0.5) else { return }
    let encoded = try! PropertyListEncoder().encode(data)
    UserDefaults.standard.set(encoded, forKey: "KEY")
}

func loadImage() {
     guard let data = UserDefaults.standard.data(forKey: "KEY") else { return }
     let decoded = try! PropertyListDecoder().decode(Data.self, from: data)
     let image = UIImage(data: decoded)
}

【讨论】:

    【解决方案2】:

    如果您曾经使用过 firebase,您就会明白所有图像和视频都保存为数据而不是像素。

    保存到 UserDefaults 时采用类似的方法

    // 存储图像数据

    private func store(image: UIImage, forKey key: String, withStorageType storageType: StorageType) {
    
    if let pngRepresentation = image.pngData() {
        
            UserDefaults.standard.set(pngRepresentation, forKey: key)
        
    }
    

    }

    // 检索图像数据并获取图像

    为了检索它,我们将获取该图像数据

    private func retrieveImage(forKey key: String, inStorageType storageType: StorageType) -> UIImage? {
    
        if let imageData = UserDefaults.standard.object(forKey: key) as? Data, 
            let image = UIImage(data: imageData) {
            
            return image
        }
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-07
      • 2021-02-09
      • 2023-03-07
      • 1970-01-01
      • 2020-12-19
      • 2020-02-27
      • 1970-01-01
      相关资源
      最近更新 更多