Мне нужно UIWebView для отображения некоторого локального файла .webarchive. Но изображения там имеют одинаковые имена, поэтому UIWebView показывает только одно изображение все время. Как очистить кеш?
Заранее спасибо
Мне нужно UIWebView для отображения некоторого локального файла .webarchive. Но изображения там имеют одинаковые имена, поэтому UIWebView показывает только одно изображение все время. Как очистить кеш?
Заранее спасибо
// Flush all cached data
[[NSURLCache sharedURLCache] removeAllCachedResponses];
NSURLRequest* request = [NSURLRequest requestWithURL:fileURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];
[webView loadRequest:request];
(теперь с фиксированной опечаткой)
Используя
[[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).
У меня была проблема с script и css файлами, которые кэшируются.
Мое решение состояло в том, чтобы поместить параметр кэширования на URL-адрес src:
<script src='myurl?t=1234'> ...
где t = 1234 изменяется каждый раз, когда страница загружается.
//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 вашего приложения.
Я работаю с некоторыми дизайнерами, редактируя 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).
Используйте следующий код:
NSString *cacheDir=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
[[NSFileManager defaultManager]removeItemAtPath:cacheDir error:nil];
Для быстрого 3
//to remove cache from UIWebview
URLCache.shared.removeAllCachedResponses()
if let cookies = HTTPCookieStorage.shared.cookies {
for cookie in cookies {
HTTPCookieStorage.shared.deleteCookie(cookie)
}
}