81-Swift之圖像的存儲(UserDefaults)

前言

在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
}

說明:

  • 通過 UserDefaultsKey 來獲取存儲的數據對象。

  • 然后在將存儲的數據對象進行反序列化轉換為需要的類型對象。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容