81-Swift之图像的存储(UserDefaults)
2017-11-06 本文已影响14人
NetWork小贱
前言
在App的开发中,数据的存储是基本要掌握的技能。数据可以存放在云端或者服务器,也可以存放到本地。在云端和服务器上的数据可以通过连接(网址)进行存储和读取。存储在本地的数据就不是很好读取,这是因为现在iOS的系统在App的每次安装(Command + R)都会重新生成一个UDID,即是应用的安装序列号,这就导致在上一次运行存储的数据,在下一次运行获取中,出现找不到存储的文件的错误提示。目前,对使用文件路径存储数据同时经常需要 Command + R 的项目这是不可取的。如果在项目开发中要经常的 Command + R ,请选择将数据存储到云端或者服务器,再者使用 UserDefaults 。其中 UserDefaults 存储的数据是通过 Key - Value 形式存储和获取的,App的安装序列号的变化不影响 UserDefaults 的数据获取和存储。本篇就以存储图像为例子给大家演示。
一、图像的存储
// MARK: 图像的存储(使用 UserDefaults )
func imageSave(image:UIImage) -> Bool {
// 图像要使用 UserDefaults 存储,首先要转化图像,否则,再次获取的为 nil
let saveImage = UIImage.init(cgImage: image.cgImage!, scale: image.scale, orientation: image.imageOrientation)
// UserDefaults 要存储对象要使用二进制流的形式
let imageData = NSKeyedArchiver.archivedData(withRootObject: saveImage)
// 进行存储
UserDefaults.standard.set(imageData, forKey: "imageKey")
// 进行磁盘同步
return UserDefaults.standard.synchronize()
}
注意:
-
图像的存储不能直接存储,否则,在获取的时候得到的数据为 nil 。要进行一次转化在存储。
-
图像存储要将图像序列化为数据流进行存储。
二、图像的获取
// MARK: 图像的读取
func imageRead(imageKey:String) -> UIImage? {
// 获取存储的数据
let imageData = UserDefaults.standard.data(forKey: imageKey)
var image:UIImage?
if imageData != nil {
image = NSKeyedUnarchiver.unarchiveObject(with: imageData!) as? UIImage
}
// 获取图像对象
return image
}
说明:
-
通过 UserDefaults 的 Key 来获取存储的数据对象。
-
然后在将存储的数据对象进行反序列化转换为需要的类型对象。