在 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
我想将一个 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