最近用沙盒存儲文件的時候發現了一個奇怪的現象,由於業務需要,我會將保存的文件絕對路徑保存以便下次讀取。
於是發現一個找不到的現象,即上一次保存下的絕對路徑,再第二次打開app去查找的時候,發現找不到。。。
比如:
我第一次保存一個文件,保存路徑如下:
/Users/MACBOOK/Library/Developer/CoreSimulator/Devices/42B54721-B3EB-448A-A450-1E11165011A0/data/Containers/Data/Application/5CBBF509-BD9B-4AA9-AA19-A04FC5C791E6/Documents/Picture/11/20160818115808
然后將這個路徑保存到一個地方,下次根據這個路徑去取文件,然后就回出現我如上描述的問題。
原因如下:
iOS8之后,蘋果添加的新特性,將每次打開app內的沙盒[唯一編碼路徑](紅框部分)重新生成,並保持上一次的沙盒文件(Documents、Library、tmp)移到新生成的文件內,舊文件刪除,就是說,你保存的文件都在,只不過每次打開后,都會有一個新的絕對路徑。
因此,以后存取文件,就要避免我之前的做法,不用記錄絕對路徑,而用相對路徑替代。
記錄我們的相對路徑,拼接上沙盒的根路徑即可。
1、相對路徑relPath: /file/1.png
2、獲取rootPath
如下:
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
或
NSString *rootPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
沙盒完整路徑 = rootPath + relPath
這樣保證沒次取路徑,都是最新的路徑,而避免了用絕對路徑帶來的錯誤。
最后記住:下次千萬不要記錄絕對路徑。
enjoy~