Как очистить кеш UIWebView? - PullRequest
25 голосов
/ 26 марта 2010

Мне нужен UIWebView для отображения локального файла .webarchive. Но изображения там имеют одинаковые имена, поэтому UIWebView показывает только одно изображение все время. Как очистить кеш?

Заранее спасибо

Ответы [ 9 ]

32 голосов
/ 05 мая 2011
// Flush all cached data
[[NSURLCache sharedURLCache] removeAllCachedResponses];
17 голосов
/ 30 июня 2010
NSURLRequest* request = [NSURLRequest requestWithURL:fileURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];

[webView loadRequest:request];

(теперь с исправленной опечаткой)

11 голосов
/ 31 декабря 2012

Использование

[[NSURLCache sharedURLCache] removeAllCachedResponses];

ДО совершения вызова или при загрузке контроллера представления, это статическая функция, которая удаляет все данные кэша для ответов. Только с использованием cachePolicy этого было недостаточно, я вижу, что uiwebview может обновлять HTML-документ, но не связанный документ, такой как CSS, JS или изображения.

Я пробую это решение, и оно работает.

 if (lastReq){
    [[NSURLCache sharedURLCache] removeCachedResponseForRequest:lastReq];
    [[NSURLCache sharedURLCache] removeAllCachedResponses];

}

lastReq=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:localUrl]
                                   cachePolicy:NSURLRequestReloadIgnoringCacheData
                               timeoutInterval:10000];
[lastReq setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];

[self.mainWebView loadRequest:lastReq];

- Прежде всего, я удаляю кеш для последнего запроса и призываю удалить весь другой кеш (думаю, это не так важно) - Затем я создаю запрос nsurlrequest и игнорирую LocalCacheData - наконец, загрузить новый запрос

Я проверяю его и перезагружаю все файлы (html, css, js и images).

11 голосов
/ 08 марта 2011

У меня возникла эта проблема с кэшированием скриптов и CSS-файлов.

Мое решение состояло в том, чтобы поместить параметр очистки кэша в URL src:

<script src='myurl?t=1234'> ...

где t = 1234 изменяется при каждой загрузке страницы.

5 голосов
/ 13 апреля 2011
//to prevent internal caching of webpages in application
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];
sharedCache = nil;

попробуйте использовать это. Это очистит кэш-память вашего приложения.

4 голосов
/ 15 ноября 2012

Я работаю с некоторыми дизайнерами, редактирующими файлы CSS, используемые некоторыми веб-представлениями в приложении. Они жаловались, что изменения в таблицах стилей не были отражены в приложении, и небольшая отладка с помощью Charles подтвердила, что они не были перезагружены. Я пытался, казалось бы, каждый ответ на StackOverflow, но безрезультатно.

В конце концов, трюк создал подкласс NSURLCache, который переопределяет -cachedResponseForRequest:

- (NSCachedURLResponse*)cachedResponseForRequest:(NSURLRequest*)request
{
    if ([[[[request URL] absoluteString] pathExtension] caseInsensitiveCompare:@"css"] == NSOrderedSame)
        return nil;
    else
        return [super cachedResponseForRequest:request];
}

Затем я устанавливаю его с разумной памятью и объемом диска:

NSURLCache *currentCache = [NSURLCache sharedURLCache];
NSString *cachePath = [cachesDirectory() stringByAppendingPathComponent:@"DebugCache"];

DebugURLCache *cache = [[DebugURLCache alloc] initWithMemoryCapacity:currentCache.memoryCapacity diskCapacity:currentCache.diskCapacity diskPath:cachePath];
[NSURLCache setSharedURLCache:cache];
[cache release];

(cachesDirectory() - это функция, которая возвращает /Library/Caches в каталоге приложения на iOS).

Как вы можете сказать по названию, я использую это только в конфигурации отладки (используя настройку сборки дополнительных флагов препроцессора и некоторые #ifdefs).

1 голос
/ 03 февраля 2017

Для быстрых 3

//to remove cache from UIWebview
URLCache.shared.removeAllCachedResponses()
    if let cookies = HTTPCookieStorage.shared.cookies {
        for cookie in cookies {
            HTTPCookieStorage.shared.deleteCookie(cookie)
        }
    }
0 голосов
/ 19 ноября 2018

это работает как шарм!

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];

//Clear All Cookies
for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
0 голосов
/ 06 февраля 2013

Используйте следующий код:

NSString *cacheDir=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];  
  [[NSFileManager defaultManager]removeItemAtPath:cacheDir error:nil];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...