Ответ 1
// Flush all cached data
[[NSURLCache sharedURLCache] removeAllCachedResponses];
Мне нужно 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)
}
}