2013-10-01 2 views
14

UIWebView에 웹 응용 프로그램을 표시하고 때로는 페이지의 내용이 변경됩니다. 콘텐츠가 변경되면 앱이 캐시를 지 웁니다.UIWebView의 내부 캐시를 제거하십시오.

[[NSURLCache sharedURLCache] removeAllCachedResponses]; 
[[NSURLCache sharedURLCache] setDiskCapacity:0]; 
[[NSURLCache sharedURLCache] setMemoryCapacity:0]; 

초기에는 더 나는로드 해요 : 내가 이전에 HTTP GET 요청을 전송하지 않습니다 UIWebView을 방문했던 페이지로 이동하지만, 때 캐시에서로드 나는 장애인 캐시과 같이했습니다에도 불구하고 cachePolicy로 요청 (cachePolicy:NSURLRequestReturnCacheDataElseLoad).

[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:myURLString] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10.0]]; 

UIWebView에는 내부 캐시가 있습니다. 이미 방문한 페이지는 NSURLCache을 거치지 않고이 내부 캐시에서로드되며 요청이 전송되지 않습니다.

UIWebView의 내부 캐시를 지울 수있는 방법이 있습니까? 나는 심지어 UIWebView을 다시 만들고 있지만 캐시는 여전히 존재합니다.

+0

해결책을 시도해 보셨습니까? http://stackoverflow.com/a/14096331/1749367 – helper

+0

예, 이러한 솔루션을 사용하여 성공한 것은 내가 원하는 것을 위해 효과가 없습니다. –

+0

HTTP 응답 헤더의 Cache-Control 속성을 max-age = 0으로 설정하여 문제를 해결했습니다. 그런 다음 매번 자원에 대한 요청이 전송됩니다. 이를 해결하는 방법은 파일이 마지막 캐시 제거 이후에 ​​요청되었는지를 계속 추적하고, 마지막 제거 후에 자원이 두 번째로로드 될 때 max-age를 다른 값 (예 : 3600)으로 설정할 수 있습니다. –

답변

21

여기서 일어나는 현상은 실제 HTML 파일을 다시로드하지만 해당 페이지 내의 리소스를 반드시 다시로드하지 않는다는 것입니다.

가능한 해결책은 URL 끝에 쿼리 ​​매개 변수를 추가하는 것입니다. 예를 들면 : 당신이 당신의 randQuery 쿼리 매개 변수로 random alphanumeric string를 생성하거나 영구적 인 수를 유지하고 그냥 계산

NSString *testURL = [NSString stringWithFormat:@"%@?t=%@", url, randQuery]; 
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:testURL] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10.0]]; 

.

이렇게하면 UIWebView가 원격 리소스에서 강제로로드되어야합니다.

+0

캐싱을 완전히 비활성화하지 않으려합니다. 죄송합니다. NSURLRequestReloadIgnoringLocalAndRemoteCacheData를 혼란스럽게 사용하고 있습니다. 질문을 업데이트합니다. 실제로 cachePolicy를 사용 중입니다 : NSURLRequestReturnCacheDataElseLoad.캐시를 제거 할 때까지 캐쉬되기를 원합니다. –

+0

그러면 서버 측만 사용해야하는 것처럼 들리 겠지만 페이지를 새로 고쳐야하는 것이 아니라 내용이 변경 될 때 AJAX 요청이나 웹 소켓을 사용할 수 있습니다. 그것은 아마도 당신의 상황에서 효과가 있습니까? –

+0

좋은 생각이지만 제 경우에는 적합하지 않습니다. 다른 회사가 웹 앱을 만들었습니다. 그래도 수정할 수는 있지만 웹 앱은 이미 구축되었습니다. –

7

나는 동일한 문제가 있었고 HTTPShouldHandleCookies 속성을 NO로 설정하면 문제가 해결되었습니다. 예를 들어

:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strurl]]; 

[request setHTTPShouldHandleCookies:NO]; 

[webView loadRequest: request]; 

희망이 도움이됩니다.

+0

나에게 적합하지 않음 - 네트워크가 아닌 로컬 파일에 액세스하고 있습니다. 어쨌든 고마워 :) –