web-dev-qa-db-ja.com

UIWebViewキャッシュをクリアする方法は?

ローカルの.webarchiveファイルを表示するにはUIWebViewが必要です。ただし、画像には同じ名前があるため、UIWebViewは常に1つの画像のみを表示します。キャッシュをクリアするにはどうすればよいですか?

前もって感謝します

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

(現在、タイプミスが修正されています)

17
Biranchi

スクリプトとcssファイルがキャッシュされるという問題が私自身にありました。

私の解決策は、src urlにキャッシュ無効化パラメーターを配置することでした。

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

ここで、t = 1234はページがロードされるたびに変わります。

11
TomSwift

を使用して

[[NSURLCache sharedURLCache] removeAllCachedResponses];

呼び出しを行う前、またはView Controllerをロードするとき、これは応答のすべてのキャッシュデータを削除する静的関数です。 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、および画像)をリロードします。

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;

これを使ってみてください。アプリケーションのURLキャッシュメモリがクリアされます。

5
Naveen Shan

私は、アプリの一部のWebビューで使用されるCSSファイルを編集するデザイナーと協力しています。彼らは、スタイルシートの変更がアプリに反映されないと不満を漏らし、 Charles を使用した少しのデバッグで、リロードされていないことが確認されました。 StackOverflowのすべての回答を一見、無駄にしようとしました。

最終的にこのトリックを行ったのは、_-cachedResponseForRequest:_をオーバーライドするNSURLCacheサブクラスを作成することでした

_- (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()は、iOSのアプリケーションディレクトリの下で_/Library/Caches_を返す関数です)。

名前からわかるように、これはデバッグ構成でのみ使用しています(追加のプリプロセッサフ​​ラグビルド設定といくつかの#ifdefを使用)。

4
Frank Schmitt

Swiftの場合

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

次のコードを使用します。

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

この作品は魅力のようです!

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