iOS 8.0以后關(guān)于沙盒路徑的坑

前言

獲取沙盒路徑對于每位開發(fā)者來說基本上都是不值一提的事兒

這是一個NSString的擴展,以便開發(fā)中通過NSString的類方法直接獲取對應(yīng)路徑。這里也解釋下為什么基于NSString寫擴展而不是String,主要原因是考慮到類方法使用的方便性,NSString是類,而String是結(jié)構(gòu)體,所以String不能添加類方法。

extension NSString {
    /// 獲取document路徑
    class func getDocumentPath() -> String {
        return NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first!
    }
    
    /// 獲取cache路徑
    class func getCachePath() -> String {
        return NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.cachesDirectory, FileManager.SearchPathDomainMask.userDomainMask, true).first!
    }
    
    /// 獲取tmp路徑
    class func getTmpPath() -> String {
        return NSTemporaryDirectory()
    }
}

正題

在之前的沙盒機制中,APP一旦安裝完畢,在之后每次獲取到的沙盒路徑都是不變的。如果開發(fā)中有下載需求,通常我們會把已下載文件的路徑隨著其他信息一并保存到數(shù)據(jù)庫,再次需要用到已下載文件時則會根據(jù)之前保存的路徑查找。這在iOS 8.0之前是沒有問題的。

但是現(xiàn)在卻出現(xiàn)了這樣的情況:

// 第一次啟動
/Users/jinzhiyuan/Library/Developer/CoreSimulator/Devices/493C49E5-0C2C-4731-A395-CFF14A2D0140/data/Containers/Data/Application/<u>2828F7CA-8912-4AAA-9F57-BC7D6931078F/Documents</u>


// 再次啟動
/Users/jinzhiyuan/Library/Developer/CoreSimulator/Devices/493C49E5-0C2C-4731-A395-CFF14A2D0140/data/Containers/Data/Application/<u>0CF93773-3FC0-4A38-813E-7D70A29E0702/Documents</u>

仔細觀察會發(fā)現(xiàn)從Application/之后路徑開始不一樣了,也就說同一臺設(shè)備上的同一個APP,殺死后再次啟動我們再拿到的沙盒路徑會發(fā)生改變。不過我們的保存在本地的數(shù)據(jù)并沒有發(fā)生變化,系統(tǒng)會將之前沙盒中的文件會毫無保留的移動新的沙盒路徑下,并將之前的沙盒文件刪掉。

由于現(xiàn)在沙盒路徑是動態(tài)生成的,所以我們不能將已將下載文件的路徑通過數(shù)據(jù)庫保留在本地,我之前就是根據(jù)本地已存儲的路徑去查找已下載文件,分明都是已下載,卻怎么都查找不到,如果是新手或者平時沒注意到這點的同行來說會糾結(jié)郁悶很久,我在這里栽過跟頭,所以將這點小經(jīng)驗分享出來,或許能幫到些同學(xué)...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、 沙盒概念基本介紹 iOS 應(yīng)用程序只能在該 app 的文件系統(tǒng)中讀取。這個默認的 app 文件系統(tǒng)就是我們說...
    Laughingg閱讀 2,918評論 2 10
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,525評論 19 139
  • 提到數(shù)據(jù)持久化 我們必須得先了解IOS程序的沙盒機制(sandBox)。 1.IOS沙盒機制介紹 iOS應(yīng)用程...
    _Half______閱讀 12,746評論 4 24
  • 在iOS8之前,我們獲取到沙盒中的document、cache、tmp之后,下一次模擬器或真機無論重啟多少次,這具...
    英貳與我閱讀 4,210評論 2 14
  • 1、沙盒機制介紹 iOS中的沙盒機制是一種安全體系。每個iOS程序都有一個獨立的文件系統(tǒng)(存儲空間),而且只能在對...
    zhaihongxia閱讀 536評論 0 0

友情鏈接更多精彩內(nèi)容