是否可以将图像保存为对象并存储在NSUserDefaults
中,以供进一步使用?
是否可以将图像保存为对象并存储在NSUserDefaults
中,以供进一步使用?
由于这个问题在谷歌搜索中的排名很高 - 这里是@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
}
}
是的,你可以使用。但由于它是用于存储偏好设置,最好将图像保存到文档文件夹中。
如果需要,你可以在NSUserDefaults
中获取路径。
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
}