在NSUserDefaults中保存图片?

83

是否可以将图像保存为对象并存储在NSUserDefaults中,以供进一步使用?

13个回答

1

由于这个问题在谷歌搜索中的排名很高 - 这里是@NikitaTook在今天的时代即Swift 3和4中的答案(带有异常处理)。

注意:此类仅用于将JPG格式的图像读取和写入文件系统。 Userdefaults的相关内容应在其外部处理。

writeFile接受您的jpg图像文件名(带有.jpg扩展名)和UIImage本身,并在能够保存时返回true,否则返回false,此时您可以将图像存储在Userdefaults中,这将是您的备份计划或简单地重试一次。 readFile函数接受图像文件名并返回UIImage,如果找到传递给此函数的图像名称,则返回该图像,否则仅从应用程序资产文件夹返回默认占位符图像(这样您就可以避免不良崩溃或其他奇怪的行为)。

import Foundation
import UIKit

class ReadWriteFileFS{

    func writeFile(_ image: UIImage, _ imgName: String) -> Bool{
        let imageData = UIImageJPEGRepresentation(image, 1)
        let relativePath = imgName
        let path = self.documentsPathForFileName(name: relativePath)

        do {
            try imageData?.write(to: path, options: .atomic)
        } catch {
            return false
        }
        return true
    }

    func readFile(_ name: String) -> UIImage{
        let fullPath = self.documentsPathForFileName(name: name)
        var image = UIImage()

        if FileManager.default.fileExists(atPath: fullPath.path){
            image = UIImage(contentsOfFile: fullPath.path)!
        }else{
            image = UIImage(named: "user")!  //a default place holder image from apps asset folder
        }
        return image
    }
}

extension ReadWriteFileFS{
    func documentsPathForFileName(name: String) -> URL {
        let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        let path = paths[0]
        let fullPath = path.appendingPathComponent(name)
        return fullPath
    }
}

1

是的,你可以使用。但由于它是用于存储偏好设置,最好将图像保存到文档文件夹中。

如果需要,你可以在NSUserDefaults中获取路径。


1

Swift 4.x
Xcode 11.x

func saveImageInUserDefault(img:UIImage, key:String) {
    UserDefaults.standard.set(img.pngData(), forKey: key)
}

func getImageFromUserDefault(key:String) -> UIImage? {
    let imageData = UserDefaults.standard.object(forKey: key) as? Data
    var image: UIImage? = nil
    if let imageData = imageData {
        image = UIImage(data: imageData)
    }
    return image
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接