iOS 开发 WKWebView缓存处理的问题

WKWebView使用中遇到的问题

1.关于缓存的问题

因为使用了WKWebView,后端的策划人员换图,iOS端没有更新,然后google了好久,最终算是解决了这个问题。

首先,加载第一个页面。

_urlStr = @"https://www.baidu.com";

//设置缓存的请求策略和超时时间

NSURLRequest * urlReuqest = [[NSURLRequest alloc]initWithURL:[NSURL URLWithString:_urlStr] cachePolicy:1 timeoutInterval:30.0f];

[_webView loadRequest:urlReuqest];

这时能正常的显示第一个页面,及时更换了图片也能正常的显示。

但是在跳转另一个URL时,不能设置缓存方式。。。这样就造成了,如果你更换了图片,并且之前你进入了这个页面,就导致了你看到的是以前的页面。我这里找到的处理的方式是在这个WKWebView调用dealloc方法时,把html页面的缓存全部删掉。以下是方法

//在ViewController销毁时移除KVO观察者,同时清除所有的html缓存

- (void)dealloc {

[self.webView removeObserver:self forKeyPath:@"estimatedProgress"];

[self.webView removeObserver:self forKeyPath:@"title"];

[self clearCache];

}

/** 清理缓存的方法,这个方法会清除缓存类型为HTML类型的文件*/

- (void)clearCache {

/* 取得Library文件夹的位置*/

NSString *libraryDir = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask, YES)[0];

/* 取得bundle id,用作文件拼接用*/

NSString *bundleId = [[[NSBundle mainBundle] infoDictionary]objectForKey:@"CFBundleIdentifier"];

/*

* 拼接缓存地址,具体目录为App/Library/Caches/你的APPBundleID/fsCachedData

*/

NSString *webKitFolderInCachesfs = [NSString stringWithFormat:@"%@/Caches/%@/fsCachedData",libraryDir,bundleId];

NSError *error;

/* 取得目录下所有的文件,取得文件数组*/

NSFileManager *fileManager = [NSFileManager defaultManager];

// NSArray *fileList = [[NSArray alloc] init];

//fileList便是包含有该文件夹下所有文件的文件名及文件夹名的数组

NSArray *fileList = [fileManager contentsOfDirectoryAtPath:webKitFolderInCachesfs error:&error];

/* 遍历文件组成的数组*/

for(NSString * fileName in fileList){

/* 定位每个文件的位置*/

NSString * path = [[NSBundle bundleWithPath:webKitFolderInCachesfs] pathForResource:fileName ofType:@""];

/* 将文件转换为NSData类型的数据*/

NSData * fileData = [NSData dataWithContentsOfFile:path];

/* 如果FileData的长度大于2,说明FileData不为空*/

if(fileData.length >2){

/* 创建两个用于显示文件类型的变量*/

int char1 =0;

int char2 =0;

[fileData getBytes:&char1 range:NSMakeRange(0,1)];

[fileData getBytes:&char2 range:NSMakeRange(1,1)];

/* 拼接两个变量*/

NSString *numStr = [NSString stringWithFormat:@"%i%i",char1,char2];

/* 如果该文件前四个字符是6033,说明是Html文件,删除掉本地的缓存*/

if([numStr isEqualToString:@"6033"]){

[[NSFileManager defaultManager] removeItemAtPath:[NSString stringWithFormat:@"%@/%@",webKitFolderInCachesfs,fileName]error:&error];

continue;

}

}

}

}

猜你喜欢

转载自blog.csdn.net/ljc_563812704/article/details/84337267