前言
在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 來獲取存儲的數據對象。
然后在將存儲的數據對象進行反序列化轉換為需要的類型對象。