J'ai besoin de UIWebView pour afficher un fichier .webarchive local. Mais les images y ayant le même nom, UIWebView ne montre qu’une image à la fois. Comment puis-je vider le cache?
Merci d'avance
// Flush all cached data
[[NSURLCache sharedURLCache] removeAllCachedResponses];
NSURLRequest* request = [NSURLRequest requestWithURL:fileURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];
[webView loadRequest:request];
(maintenant avec faute de frappe fixe)
J'ai moi-même eu ce problème avec la mise en cache de fichiers script et css.
Ma solution a été de mettre un paramètre de cache-cache sur l'URL src:
<script src='myurl?t=1234'> ...
où t = 1234 change chaque fois que la page est chargée.
En utilisant
[[NSURLCache sharedURLCache] removeAllCachedResponses];
AVANT de passer l'appel ou lorsque vous chargez le contrôleur de vue, il s'agit d'une fonction statique qui supprime toutes les données du cache pour les réponses. Seulement en utilisant cachePolicy ce n’était pas assez, je vois que uiwebview pourrait rafraîchir le document html mais pas le document lié comme CSS, JS ou les images.
J'essaie cette solution et ça marche.
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];
- Tout d’abord, je supprime le cache pour la dernière demande et appelle pour supprimer tous les autres cache (je pense que ce n’est pas si important). la nouvelle demande
Je le vérifie et il recharge tous les fichiers (html, css, js et images).
//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;
essayez d'utiliser ceci. Cela effacera la mémoire cache de votre application.
Je travaille avec des concepteurs qui modifient les fichiers CSS utilisés par certaines vues Web dans une application. Ils se plaignaient du fait que les modifications apportées aux feuilles de style n'étaient pas reflétées dans l'application, et un peu de débogage avec Charles confirmait qu'elles n'étaient pas rechargées. J'ai apparemment essayé chaque réponse sur StackOverflow, en vain.
En fin de compte, l’astuce a été de créer une sous-classe NSURLCache
qui remplace -cachedResponseForRequest:
- (NSCachedURLResponse*)cachedResponseForRequest:(NSURLRequest*)request
{
if ([[[[request URL] absoluteString] pathExtension] caseInsensitiveCompare:@"css"] == NSOrderedSame)
return nil;
else
return [super cachedResponseForRequest:request];
}
Je l'installe ensuite avec une mémoire et une capacité de disque raisonnables:
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()
est une fonction qui renvoie /Library/Caches
dans le répertoire de l'application sur iOS).
Comme son nom l’indique, je l’utilise uniquement dans la configuration de débogage (à l’aide du paramètre de construction Additional Preprocessor Flags et de certains #ifdefs).
Pour Swift 3
//to remove cache from UIWebview
URLCache.shared.removeAllCachedResponses()
if let cookies = HTTPCookieStorage.shared.cookies {
for cookie in cookies {
HTTPCookieStorage.shared.deleteCookie(cookie)
}
}
Utilisez le code suivant:
NSString *cacheDir=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
[[NSFileManager defaultManager]removeItemAtPath:cacheDir error:nil];
cela fonctionne comme un charme!
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];
}