web-dev-qa-db-fra.com

Comment effacer le cache UIWebView?

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

25
Mike Rychev
// Flush all cached data
[[NSURLCache sharedURLCache] removeAllCachedResponses];
32
Caleb Shay
NSURLRequest* request = [NSURLRequest requestWithURL:fileURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];

[webView loadRequest:request];

(maintenant avec faute de frappe fixe)

17
Biranchi

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.

11
TomSwift

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

11
jgorozco
//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.

5
Naveen Shan

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

4
Frank Schmitt

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)
        }
    }
1
Hardik Thakkar

Utilisez le code suivant:

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

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];
}
0
Hamid-Ghasemi