關於每次重新執行app,儲存檔案的沙盒路徑就失效的問題
1.發現問題
簡單舉個例子,儲存一個UIImage進沙盒/Documents目錄下
UIImage * wtImg = ...; NSString *path_header = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSData *imgData=UIImagePNGRepresentation(wtImg); NSString *path_wtImg = [path_header stringByAppendingString:@"/wtImg.png"]; [imgData writeToFile:path_wtImg atomically:YES];
然後順手把這個圖片的完整路徑path_wtImg給儲存起來了,方便其他地方讀取使用.
DuangDuangDuang~~~~
問題就出現了,本次app不殺死沒啥事,圖片順利讀取,可一旦app程序殺死了,再讀取就讀取不到了.
2.查明原因
根據地址去定址找東西,東西不見了,那必然是地址和東西沒對應上,先去找下地址對應檔案是不是還在.果然.按照原完整路徑去定址,資料夾不存在,有問題看log,通過打印發現兩次執行app的沙盒路徑不一致,不一致的地方在Application資料夾下
/Application/22F01795-4B87-4592-B5EF-E084BEC8256B/Documents/ /Application/A529F060-40BD-4A0B-9E59-04A83321BEF7/Documents/
那就是系統的問題咯,翻看文件發現在iOS8前,路徑不會變,從iOS8,Xcode6之後, 每次執行後沙盒的路徑都會變化,生成新的一個路徑,原路徑資料夾內容被替換至新路徑下,原資料夾對應就找不到了,應該是為了安全每次執行都給/Application下資料夾重名
3.解決問題
知道這個就好辦了,儲存檔案時值存檔名好了,至於讀取時候完整地址重新拼接
NSString *path_header = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString *path_wtImg = [path_header stringByAppendingString:@"/wtImg.png"]; UIImage * partImg = [UIImage imageWithContentsOfFile:path_wtImg];
搞定. 歡迎大家指正