在 NSUserDefaults 中保存 UIImage 数组

Save UIImage array in NSUserDefaults

我想将一个 UIImage 数组放入 UserDefaults 中,然后检索它。之后在图像视图中设置检索到的图像。我该怎么做?

如果你真的要那样做,那就太糟糕了。您应该将图像保存在 DocumentDirectory 中,并将图像名称保存在 NSUserDefaults 中。

func saveImages(images:[UIImage]) {

     let fileManager = FileManager.default
     let path = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString) 
     var imagesNames = [String]()


    do {

        if !fileManager.fileExists(atPath: path as String){
            try fileManager.createDirectory(atPath: path as String, withIntermediateDirectories: true, attributes: nil)
        }

     for (index,image) in images.enumarated() {
        let imageName = "Image\(index).jpg"
        let imageData = UIImageJPEGRepresentation(image, 1.0)
        if fileManager.createFile(atPath: paths.appending("/\(file)") as String, contents: imageData, attributes: nil) {
         imagesNames.append(imageName)
        }
      }
     let storage = UserDefaults.standard
     storage.set(imagesNames, forKey: "imagesArray")
     storage.synchronize()

    }catch{
        //Throw Error
    } 
}

首先,这不是以用户默认方式保存图像的理想方式,但如果您愿意,可以执行以下操作

保存

let imageData = NSKeyedArchiver.archivedData(withRootObject: placesArray)
UserDefaults.standard.set(imageData, forKey: "images")

检索

       let imageData = UserDefaults.standard.object(forKey: "images") as? NSData

        if let imageData = imageData {
            let imageArray = NSKeyedUnarchiver.unarchiveObject(with: imageData as Data) as? [UIImage]!
            print(placesArray)
        }

注意:您应该将图像保存在文档目录中,然后将该名称数组保存为用户默认值。

将图像保存在文档目录中

func saveImageDocumentDirectory(){
        let fileManager = NSFileManager.defaultManager()
        let paths = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString).stringByAppendingPathComponent("apple.jpg")
        let image = UIImage(named: "apple.jpg")
        print(paths)
        let imageData = UIImageJPEGRepresentation(image!, 0.5)
        fileManager.createFileAtPath(paths as String, contents: imageData, attributes: nil)
    }

检索图像

func getImage(name : String){
        let fileManager = NSFileManager.defaultManager()
        let imagePAth = (self.getDirectoryPath() as NSString).stringByAppendingPathComponent(name)
        if fileManager.fileExistsAtPath(imagePAth){
            self.imageView.image = UIImage(contentsOfFile: imagePAth)
        }else{
            print("No Image")
        }
    }

func getDirectoryPath() -> String {
    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0]
    return documentsDirectory
}

简单的方法,将 UIImages 转换为 NSData。然后将图像数据添加到 NSArray 中。然后将 NSArray 保存到 UserDefault 中。 从 UserDefault 检索 NSArray 时,使用 ImageWithData 方法从 NSArray 的每个元素渲染 UIImage。 如果您确实出于您的目的使用 UserDefaults,这是最简单的过程。自己试试。

您可以轻松地将图像保存在 documentDirectory 中,如下所示:

let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first let fileURL = documentDirectory?.appendingPathComponent(yourImageName)

然后,您可以将您的图像提供给 UserDefaults