Подтвердить что ты не робот

Как очистить кеш UIWebView?

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

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

4b9b3361

Ответ 1

// Flush all cached data
[[NSURLCache sharedURLCache] removeAllCachedResponses];

Ответ 2

NSURLRequest* request = [NSURLRequest requestWithURL:fileURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];

[webView loadRequest:request];

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

Ответ 3

Используя

[[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).

Ответ 4

У меня была проблема с script и css файлами, которые кэшируются.

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

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

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

Ответ 5

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

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

Ответ 6

Я работаю с некоторыми дизайнерами, редактируя CSS файлы, используемые некоторыми веб-представлениями в приложении. Они жаловались, что изменения в таблицах стилей не отразились в приложении, а немного отладки с Charles подтвердили, что они weren ' t перезаряжается. Я пробовал, казалось бы, каждый ответ на 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).

Ответ 7

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

NSString *cacheDir=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];  
  [[NSFileManager defaultManager]removeItemAtPath:cacheDir error:nil];

Ответ 8

Для быстрого 3

//to remove cache from UIWebview
URLCache.shared.removeAllCachedResponses()
    if let cookies = HTTPCookieStorage.shared.cookies {
        for cookie in cookies {
            HTTPCookieStorage.shared.deleteCookie(cookie)
        }
    }