2016-03-28 12 views
5

E 'possibile in AFNetworking memorizzare nella cache l'immagine su disco per più di una sessione? Ad esempio per una settimana o un mese. Nel mio progetto ho usato SDWebImage e AFNetworking, ma pochi giorni fa ho scoperto che AFNetworking ha la stessa funzionalità SDWebImage, quindi un rimosso SDWebImage e ho scritto questo codice per memorizzare immagini sul disco:AFNetworking 3.0 su cache immagine disco

per ImageView

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

immagine Scarica da utilizzare in futuro

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

vengono scaricati immagine

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

Ma tutto questo lavoro solo per sessione, dopo ho caricato tutte le immagini spengo internet e riavviare il mio app, risultato - nessuna immagine nella cache.

Inoltre cerco di aggiungere tale codice in AppDelegate:

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

Ma riesco ancora le immagini non di cache per più di sessione. (Scusate il mio inglese)

risposta

6

Le immagini vengono memorizzate nella cache su disco utilizzando NSURLCache standard integrato in iOS, il che significa che se le vostre risposte includono intestazioni di cache appropriate, tali elementi dovrebbero finire sul disco nella cache. Così, per esempio le intestazioni dovrebbe essere simile:

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

anche se si scarica l'immagine e vuole ottenere dalla cache del disco fare:

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