把圖片緩存到本地,在很多場景都會用到,如果是只儲存文字信息,那建一個plist文件,或者數據庫就能很方便的解決問題,但是如果存圖片到沙盒就沒那麼方便了。這裡介紹兩種保存圖片到沙盒的方法。
一.把圖片轉為base64的字符串存到數據庫中或者plist文件中,然後用到的時候再取出來
//獲取沙盒路徑,
NSString *path_sandox = NSHomeDirectory();
//創建一個存儲plist文件的路徑
NSString *newPath = [path_sandox stringByAppendingPathComponent:@/Documents/pic.plist];
NSMutableArray *arr = [[NSMutableArray alloc] init];
//把圖片轉換為Base64的字符串
NSString *image64 = [self encodeToBase64String:image];
[arr addObject:image64];
//寫入plist文件
if ([arr writeToFile:newPath atomically:YES]) {
NSLog(@寫入成功);
};
這樣就存起來的,然後用到的時候再利用存儲的字符串轉化為圖片
NSData *_decodedImageData = [[NSData alloc] initWithBase64Encoding:image64];
UIImage *_decodedImage = [UIImage imageWithData:_decodedImageData];
二.把圖片直接保存到沙盒中,然後再把路徑存儲起來,等到用圖片的時候先獲取圖片的路徑,再通過路徑拿到圖片
//拿到圖片
UIImage *image = [UIImage imageNamed:@flower.png]; NSString *path_sandox = NSHomeDirectory();
//設置一個圖片的存儲路徑
NSString *imagePath = [path_sandox stringByAppendingString:@/Documents/flower.png];
//把圖片直接保存到指定的路徑(同時應該把圖片的路徑imagePath存起來,下次就可以直接用來取)
[UIImagePNGRepresentation(image) writeToFile:imagePath atomically:YES];
下次利用圖片的地址直接來拿圖片。
同時附上獲取沙盒目錄的代碼
沙盒文件目錄獲取代碼:
//Home目錄
NSString *homeDirectory = NSHomeDirectory();
//Document目錄
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
//Cache目錄
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
//Libaray目錄
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];