前言
獲取沙盒路徑對于每位開發(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é)...