保存并读取数组图像到UserDefaults中

时间:2018-07-25 17:43:28

标签: ios arrays swift

我想使用Swift 3中的UserDefaults将图像保存在数组中

   var arrayImage = [UIImage]()
   arrayImage.append(UIImage(data: dataImage as! Data)!) //add image to array
    globalD.set(arrayImage, forKey: "FavoritesContactStandardImage")

我正在这样做,但是并不能保存,如何保存然后阅读?

2 个答案:

答案 0 :(得分:1)

也许您可以尝试这些。您只需要使用saveImages和loadImages函数。 但是您需要自己实现删除功能。

let key = "FavoritesContactStandardImage"

func getImageKey(_ index:Int) -> String {
    return "\(key)\(index)"
}

func saveImages(_ images:[UIImage]) {
    var list = UserDefaults.standard.array(forKey: key) as? [String] ?? [String]()
    var index = list.count

    for image in images {
        let imgKey = getImageKey(index)
        saveImage(imgKey, image)
        list.append(imgKey)
        UserDefaults.standard.set(list, forKey: key)
        UserDefaults.standard.synchronize()
        index += 1
    }
}

func saveImage(_ imageName:String, _ image:UIImage) {
    let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString
    let imgPath = URL(fileURLWithPath: path.appendingPathComponent(imageName))

    do {
        try UIImagePNGRepresentation(image)?.write(to: imgPath, options: .atomic)
    } catch let error {
        print(error.localizedDescription)
    }
}

func loadImages() -> [UIImage] {
    let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString
    let list = UserDefaults.standard.array(forKey: key) as? [String] ?? [String]()
    var imageList = [UIImage]()
    for (index, _) in list.enumerated() {
        let imageName = getImageKey(index)
        let imgPath = URL(fileURLWithPath: path.appendingPathComponent(imageName))
        if let image = UIImage(contentsOfFile: imgPath.path) {
            imageList.append(image)
        }
    }
    return imageList
}

希望有帮助。

答案 1 :(得分:0)

将图像数据保存在 UserDefault 上是一个非常糟糕的主意,如果保存图像名称(如果将图像放在资产目录中)/图像路径(如果将图像放在项目上的自定义目录)。而且,如果您想从服务中保存下载的图像,也许可以在获得成功之前将下载的图像保存到目录并保存到UserDefault

相关问题