iOS沙盒路徑變化的說明詳解


最近用沙盒存儲文件的時候發現了一個奇怪的現象,由於業務需要,我會將保存的文件絕對路徑保存以便下次讀取。

 

於是發現一個找不到的現象,即上一次保存下的絕對路徑,再第二次打開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(NSDocumentDirectoryNSUserDomainMaskYESfirstObject];

或 

    NSString *rootPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

 

沙盒完整路徑 = rootPath + relPath

這樣保證沒次取路徑,都是最新的路徑,而避免了用絕對路徑帶來的錯誤。

 

最后記住:下次千萬不要記錄絕對路徑。

 

 

enjoy~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM