@max_sokolov

Почему не удается отучить UIWebView обращаться к локальному кэшу во время повторной загрузки одной и той же веб-страницы?

Добрый день, ребят!

Столкнулся с проблемой - не удается отучить UIWebView обращаться к локальному кэшу во время повторной загрузки одной и той же веб-страницы. Мне необходимо, чтобы каждый новый запрос лез в интернет (актуально только для iOS 7).

Вот что имеется:

1) Кастомный NSURLProtocol, который просто отслеживает http запросы.
2) Имеется UIWebView в первом UIViewController. В этот UIWebView загружаем веб-сайт:
NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:
[NSURL URLWithString:@"http://site.ru"] 
cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
3) Во время загрузки страницы в NSURLProtocol видим условно 20 запросов к этому site.ru (загружаются изображения, css, js и т.д.)
4) Во втором UIViewController со своим UIWebView делаем аналогичный запрос с тем же веб-сайтом.
5) В NSURLProtocol видим условно только 5 запросов к этому же site.ru (изображения, css, js не загружаются)

Очевидно, UIWebView полез в кэш и достал оттуда все ему необходимое, чего мне нужно избежать.
Что я пробовал:

1) Самостоятельно инициализировать кеш (также передавать в качестве memoryCapacity и diskCapacity нули).
NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:
4 * 1024 * 1024 diskCapacity:32 * 1024 * 1024 diskPath:@"dir"];
[NSURLCache setSharedURLCache:URLCache];
2) Перед отправкой запроса вызывать:
[[NSURLCache sharedURLCache] removeCachedResponseForRequest:(NSURLRequest *)];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
3) Очищать директорию с кэшем NSCachesDirectory (ужас!)
4) Манипулировать флагами cachePolicy NSURLRequestReloadIgnoringCacheData
5) Избегать кэширование на уровне NSURLProtocol:
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:
(NSCachedURLResponse *)cachedResponse {
 return nil; }
6) Прибавлять к адресу параметр времени site.ru?timestamp=21324353 (ужас!)
7) Наследовать NSURLCache и избегать кэширование:
- (NSCachedURLResponse*)cachedResponseForRequest:(NSURLRequest*)request {
    return nil; }

Ни один из вышеперечисленных способов никак не влияет на UIWebView. Складывается впечатление, что у него какой-то свой кеш, до которого не добраться.

Кто-нибудь сталкивался? Может я упустил что-то.
  • Вопрос задан
  • 2735 просмотров
Пригласить эксперта
Ответы на вопрос 3
@sojik
А попробуйте в пункте 2 сделать еще и вот так

[[NSURLCache sharedURLCache] removeAllCachedResponses];
[[NSURLCache sharedURLCache] setDiskCapacity:0];
[[NSURLCache sharedURLCache] setMemoryCapacity:0];

говорят, иногда помогает )

ЗЫ коллега, ну и тэги вы поставили ) вас никто так не найдет )
Ответ написан
Странно конечно. т.к. в запросе стоит флаг NSURLRequestReloadIgnoringCacheData. Т.е. не должно ничего сохранять в кеш. Если это только на ios7, то это какая-то недоработка у apple. Как этот же код ведет себя на ios6 ?
Ответ написан
Комментировать
@Shiny2
мучиюсь с этой же проблемой. где живет этот кеш - непонятно. но явно где-то внутри устройства
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы