Поможет ли настройка другого cachePolicy по вашему запросу?
request.cachePolicy = NSURLRequestReturnCacheDataElseLoad;
Использовать существующие данные кэша, независимо от возраста или срока действия, загружая из исходного источника, только если нет кэшированных данных.
В свойстве cachePolicy есть примечание, в котором говорится:
Это свойство игнорируется для запросов, используемых для создания объектов NSURLSessionUploadTask и NSURLSessionDownloadTask, поскольку URL-адрес не поддерживает кэширование Загрузка системы для запросов на загрузку или загрузку.
Итак, если вы выполняете свой запрос именно так, это может не сработать, и вам, вероятно, придется самостоятельно управлять кэшированием для этого запроса.
Вы можете проверить, есть ли кешированный ответ на ваш запрос со следующим (при условии, что вы используете общий кэш, а не создаете свой собственный):
NSCachedURLResponse* cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
if ( cachedResponse )
{
NSHTTPURLResponse* response = (NSHTTPURLResponse*)cachedResponse.response;
NSLog(@"Cached Response: %@", response.allHeaderFields);
}
else
{
NSLog(@"No Cached Response");
}
Если ваша конечная точка использует ETags Вы также можете сохранить значение поля заголовка ETag из кэшированного ответа, а затем сравнить это к тому, что вы получите, когда делаете запрос, это сообщит вам, был ли ответ, который вы получили, действительно из кеша или нет.
Если вышеизложенное говорит вам, что для вашего запроса нет кэшированного ответа, тогда вам нужно выяснить, почему он может не кэшировать предыдущие ответы. Возможно, существует проблема с заголовком «Cache-Control», возвращаемым с сервера, и вам не разрешено кэшировать ответы? Если бы это было так, и вы не можете контролировать серверную часть, вам придется использовать другой метод для кэширования ваших изображений.