2016-03-28 137 views
5

是否有可能在AFNetworking緩存磁盤上的圖像多於會話?例如一週或一個月。在我的項目,我用SDWebImageAFNetworking,但前幾天我發現AFNetworking具有相同的功能SDWebImage,所以去除SDWebImage,寫這樣的代碼存儲在磁盤上的圖像:AFNetworking 3.0磁盤映像緩存

爲ImageView的

NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url] 
               cachePolicy:NSURLRequestReturnCacheDataElseLoad 
              timeoutInterval:60]; 
[imageView setImageWithURLRequest:imageRequest placeholderImage:placeholderImage success:nil failure:nil]; 

下載圖像在今後的使用

在高速緩存中沒有圖像 -

得到我關閉互聯網,然後重新啓動我的應用程序,因此下載的圖像

NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url] 
               cachePolicy:NSURLRequestReturnCacheDataElseLoad 
              timeoutInterval:60]; 
UIImage *image = [[AFImageDownloader defaultInstance].imageCache imageforRequest:imageRequest withAdditionalIdentifier:nil]; 

但這一切只是每個會話的工作,之後我加載的所有圖像。

此外,我嘗試在AppDelegate添加這樣的代碼:

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:2 * 1024 * 1024 
                 diskCapacity:100 * 1024 * 1024 
                  diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 

但我仍然無法緩存圖片超過會話更長的時間。

回答

6

使用iOS中構建的標準NSURLCache將圖像緩存到磁盤上,這意味着如果您的響應包含正確的緩存標頭,則這些項目應該在緩存中的磁盤上結束。因此,例如標題應該是這樣的:

"Accept-Ranges" = bytes; 
"Cache-Control" = "max-age=604800"; 
Connection = close; 
"Content-Length" = 3808; 
"Content-Type" = "image/png"; 
Date = "Tue, 29 Mar 2016 19:55:52 GMT"; 
Etag = "\"5630989d-ee0\""; 
Expires = "Tue, 05 Apr 2016 19:55:52 GMT"; 
"Last-Modified" = "Wed, 28 Oct 2015 09:42:53 GMT"; 
Server = nginx; 

此外,如果你下載圖像,並希望從磁盤緩存中得到它:

NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url] 
                 cachePolicy:NSURLRequestReturnCacheDataElseLoad 
                timeoutInterval:60]; 
UIImage *image = [UIImage imageWithData:[[AFImageDownloader defaultURLCache] cachedResponseForRequest:imageRequest].data];