iOS 開發中本地緩存路徑變化

? ? ? ? 最近項目中遇到需要保存上傳失敗的圖片,通過匯總所有上傳失敗圖片提供一個展示列表選擇性重發的需求, 所以需要保存失敗圖片的本地路徑以用來在 列表中 通過路徑方式展示圖片:

? ? ? ?//界面刷新 imagePath 對應圖片路徑 ?---- ?imageView.image = UIImage.init(contentsOfFile: imagePath)

? ? 在這里遇到問題,保存圖片的本地路徑在程序的當次運行中都能正常顯示,但是當程序殺死,再重啟后,發現 ?UIImage.init(contentsOfFile: imagePath) ?方法無法獲得 對應的圖片,查看緩存又發現圖片確實存在, 檢測本地緩存路徑發現 一旦 程序重啟 ?上次緩存的路徑都將不復存在,糾結半天后發現iOS 沙盒機制 路徑存儲對應的系統名稱是會在每次重啟后發生變化的,所以導致 上次存儲的 絕對路徑 失效, 下面貼出 具體代碼:

緩存路徑對應的系統沙盒方法:

//************緩存數據路徑*******

? ? /// 沙盒Documents目錄

? ? static let DocumentsURL = NSHomeDirectory() + "/Documents"

? ? /// 沙盒Library目錄

? ? static let LibraryURL = NSHomeDirectory() + "/Library"

? ? /// 沙盒Caches目錄

? ? static let CachesURL = NSHomeDirectory() + "/Library/Caches"


1: 錯誤的獲得圖片路徑并存儲的方式:

? ? ? let name = "\(loginMode.useruid)_\((NSDate().timeIntervalSince1970)).PNG" //文件名

? ? ? let imagePath = RequestURL.DocumentsURL + "/\(name)"? ? ? ? ? //文件路徑 ------

? ? ? ? 通過時間戳 和 用戶ID 做圖片名稱 的唯一標識, 拼接 系統沙盒中的?Documents 目錄下生成絕對路徑?imagePath, ? 將 ?imagePath 作為字符串 保存在 本地, ? 下次程序重啟后 取出 ??imagePath ?,發現無法找到對應數據


2: 修改后的獲得圖片路徑并存儲的方式:

因為系統的 沙盒目錄 動態變化, 所以我們固定存儲的只能是 ??let name = "\(loginMode.useruid)_\((NSDate().timeIntervalSince1970)).PNG" //文件名 , ?沙盒目錄部分(Documents,Library,Library/Caches)需要每次 重新從系統中獲取, ?再與name 拼接成對應路徑 獲取到正確的數據

總而言之,不能通過絕對路徑去獲取本地緩存數據,相對路徑才是正確選擇

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

推薦閱讀更多精彩內容

  • 每次聽陳醫生的歌,都有一種不一樣的感受,或者系歌詞,或是節奏,又或者醫生本身的聲音,但不知不覺總會有不一樣的淚點產...
    青衣向海閱讀 398評論 0 1
  • 今天跳到第十五章讀“閱讀故事、戲劇與詩的一些建議”。為什么挑這一個部分讀呢?因為這本書的前一個部分是談讀理論類書籍...
    YinNan閱讀 374評論 0 1
  • 今天的隨機圖樣是Strircles,一個新圖樣,只是畫了官方解構的原圖,并未做變化,利用暗線形成了騎士橋的效果,看...
    M有如果閱讀 214評論 4 5
  • 斑駁的月影下,搖曳著兒時的夢囈。天空作畫板,彩虹為顏料,用風做衣,以夢為馬。那兒有喝不完的酒和講不完的故...
    成龍大哥哥閱讀 513評論 4 2
  • 那是一個很小很偏僻的小山村,鎮上的大部分人辛辛苦苦的掙扎,只為了活下去。 她生在一個比較復雜重組家庭,有三個同父異...
    CheungShaw閱讀 280評論 0 0