AFNetworking 3.0 на кэшировании образов дисков

Возможно ли в AFNetworking кэшировать образ на диске больше, чем на сеанс? Например на неделю или месяц. В моем проекте я использовал SDWebImage и AFNetworking, но несколько дней назад я обнаружил, что AFNetworking обладает той же функциональностью, что и SDWebImage, поэтому удалил SDWebImage и написал такой код для хранения изображения на диске:

для 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];
[[AFImageDownloader defaultInstance] downloadImageForURLRequest:imageRequest 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];

Но я все еще не могу кэшировать изображения дольше, чем сессия. (Извините за мой английский)

1 ответ

Решение

Изображения кэшируются на диске с использованием стандартного NSURLCache, встроенного в iOS, что означает, что если ваши ответы содержат правильные заголовки кэша, эти элементы должны оказаться на диске в кэше. Так, например, заголовки должны выглядеть так:

"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];
Другие вопросы по тегам