2016-09-26 81 views
2

我已经在webview加载的url,加载是成功的,但每当我再次击中它在缓存中显示两个url并再次显示三个url等等,这意味着它继续保持堆栈。我正在使用很多方法,但无法正常工作。如何删除UIWebview中的缓存?

以下是我正在尝试的至今。

1.

[[NSURLCache sharedURLCache] removeCachedResponseForRequest:NSURLRequest]; 


[[NSURLCache sharedURLCache] removeAllCachedResponses]; 

for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) { 

if([[cookie domain] isEqualToString:someNSStringUrlDomain]) { 

    [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie]; 
} 
} 

2.

int cacheSizeMemory = 4*1024*1024; // 4MB 
int cacheSizeDisk = 32*1024*1024; // 32MB 
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"]; 
[NSURLCache setSharedURLCache:sharedCache]; 

3.

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 
[sharedCache release]; 

4.

-(void) viewDidDisappear:(BOOL)animated { 
[super viewDidDisappear:animated]; 

[self.webView removeFromSuperview]; 
self.webView.delegate = nil; 
self.webView = nil; 
} 

5.

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

6.

- (void)viewWillDisappear:(BOOL)animated 
{ 
[super viewWillDisappear:animated]; 
[self.webView stopLoading]; 
} 
- (void) stopLoading { 
[self.webView stopLoading]; 
self.webView.delegate = nil; 
NSBundle *mainBundle = [NSBundle mainBundle]; 
NSURL *homeIndexUrl = [mainBundle URLForResource:@"Home" withExtension:@"html"]; 
NSURLRequest *urlReq = [NSURLRequest requestWithURL:homeIndexUrl]; 
[self.webView loadRequest:urlReq]; 
[EALoaderView hideLoaderForView:self.view animated:YES]; 
[self.webView loadHTMLString:html baseURL:nil]; 
} 

我也从这些回答之后尝试。

1. Clearing UIWebview cache

2. NSURLProtocol isn't asked to load after YES response to canInitWithRequest

3. How To Clear A UIWebView

4. How to delete the cache from UIWebview or dealloc UIWebview

5. How to clear UIWebView cache?

UIwebview without Cache 6.

我正在做很多R & D,但没有找到解决这些问题的确切解决方案。

谢谢。

回答

0

我使用代码波纹管删除缓存,希望它为你的作品:

//This must be called in Main Thread 
 
+ (void)clearWebCache 
 
{ 
 
//http://stackoverflow.com/questions/31289838/how-to-delete-wkwebview-cookies 
 
    //https://github.com/ShingoFukuyama/WKWebViewTips 
 
    //http://stackoverflow.com/questions/27105094/how-to-remove-cache-in-wkwebview/32491271#32491271 
 
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"9.0")) { 
 
     NSSet *websiteDataTypes = [NSSet setWithArray:@[WKWebsiteDataTypeDiskCache, 
 
                 //WKWebsiteDataTypeOfflineWebApplicationCache, 
 
                 WKWebsiteDataTypeMemoryCache, 
 
                 //WKWebsiteDataTypeLocalStorage, 
 
                 //WKWebsiteDataTypeCookies, 
 
                 //WKWebsiteDataTypeSessionStorage, 
 
                 //WKWebsiteDataTypeIndexedDBDatabases, 
 
                 //WKWebsiteDataTypeWebSQLDatabases 
 
                 ]]; 
 
     //// All kinds of data 
 
     //   NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes]; 
 
     //// Date from 
 
     NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0]; 
 
     //// Execute 
 
     [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes modifiedSince:dateFrom completionHandler:^{ 
 
      // Done 
 
     }]; 
 
    } 
 
    else { 
 
     NSHTTPCookie *cookie; 
 
     NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
 
     for (cookie in [storage cookies]) { 
 
      [storage deleteCookie:cookie]; 
 
     } 
 
     [[NSURLCache sharedURLCache] removeAllCachedResponses]; 
 
    } 
 
}

+0

非常感谢罗比,但我没有使用WKWebview。 – AforAmit

-1

Hayia,研究员! 研究了这个主题一段时间,并找到了一个解决方案,为我工作的最佳使用WKWebView它不泄漏! 就是这样 - 很简单。