2016-03-28 16 views
5

Có thể trong AFNetworking để lưu hình ảnh trên đĩa nhiều hơn phiên không? Ví dụ: một tuần hoặc một tháng. Trong dự án của tôi sử dụng SDWebImageAFNetworking, nhưng cách đây vài ngày tôi phát hiện ra rằng AFNetworking có cùng chức năng như SDWebImage, do đó, một loại bỏ SDWebImage và viết mã như vậy để lưu trữ hình ảnh trên đĩa:AFNetworking 3.0 trên bộ nhớ đệm hình ảnh đĩa

cho ImageView

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

Tải ảnh để sử dụng trong tương lai

NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url] 
               cachePolicy:NSURLRequestReturnCacheDataElseLoad 
              timeoutInterval:60]; 
[[AFImageDownloader defaultInstance] downloadImageForURLRequest:imageRequest success:nil failure:nil]; 

Get tải hình ảnh

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

Nhưng tất cả điều này làm việc chỉ mỗi phiên, sau khi tôi nạp tất cả hình ảnh tôi tắt internet và khởi động lại ứng dụng của tôi, kết quả - không có hình ảnh trong bộ nhớ cache.

Ngoài ra tôi cố gắng thêm mã như vậy trong AppDelegate:

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

Nhưng tôi vẫn có thể hình ảnh không nhớ cache lâu hơn phiên. (Xin lỗi cho tiếng Anh của tôi)

Trả lời

6

Hình ảnh được lưu trữ trên đĩa bằng NSURLCache chuẩn được xây dựng trong iOS, nghĩa là nếu câu trả lời của bạn bao gồm tiêu đề bộ nhớ cache thích hợp, các mục đó sẽ kết thúc trên đĩa trong bộ nhớ cache. Vì vậy, ví dụ như tiêu đề nên xem xét như:

"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; 

còn nếu bạn tải hình ảnh và muốn có được nó từ bộ nhớ cache đĩa làm:

NSURLRequest *imageRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:url] 
                 cachePolicy:NSURLRequestReturnCacheDataElseLoad 
                timeoutInterval:60]; 
UIImage *image = [UIImage imageWithData:[[AFImageDownloader defaultURLCache] cachedResponseForRequest:imageRequest].data]; 
Các vấn đề liên quan