iOS--Document路徑下儲存資料的總結

weixin_34208283發表於2017-07-05

獲取Document的路徑的方法有幾個,下面我來說一下我的做法?

// fileName就是儲存檔案的檔名

NSUserDefaults*userdefault = [NSUserDefaults standardUserDefaults];

//找到Documents檔案所在的路徑

NSArray*path =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString*filePath = [pathobjectAtIndex:0];

這個filePath就能獲取到Document的資料夾下了,之後再根據自己的需求,拼接不同的檔案路徑。

接下來便是關於儲存資料,不管是NSArray,NSDirectory,NSData,或者其他資料。

這些資料型別都是能夠儲存,儲存介面是[class  writeToFile:(檔案路徑)   atomically:YES];

獲取檔案也很簡單,NSArray---->arrayWithContentsOfFile

NSData---->dataWithContentsOfFile;NSDirectory---->directoryWithContentsOfFile

**********

以上都是耳熟能詳的,上網或者基本上書籍中都會提到的。

下面我來說一下我遇到的問題,我的專案需求是在拍照時,隨時上傳圖片,如果上傳圖片過程中出現網路中斷、不穩定、或者網速不給力,這樣導致上傳圖片失敗的,要求把失敗的圖片儲存本地,在網路穩定重新啟動應用時,遍歷路徑下的檔案,再次上傳圖片!!

原先以為比較簡單,上面的nsdata類的儲存獲取介面一調就完事,但是現實啪啪打臉。出現儲存檔案成功,我把多個檔案路徑放在NSArray中存入本地Document中。但是在應用重新啟動拿到檔案路徑,要獲取圖片資料時,NSFileManager檢測路徑下檔案根本不存在!

多次測試發現問題所在,那就是上述能獲取到Document資料夾的filePath每次都是在變化的,而我在儲存的路徑當時的完整路徑,如下?

/var/mobile/Containers/Data/Application/2BE22D43-4A6C-42EE-892F-107E508E6540/Documents/20170705145022007.jpg

其中2BE22D43-4A6C-42EE-892F-107E508E6540這段序列每次都在變化

遇到這樣儲存本地資料的問題,只把檔名也就是20170705145022007.jpg儲存在NSArray中,獲取資料時重新呼叫Document路徑拼接,這樣便能成功拿到資料!

相關文章