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;

            }

        }

    }

}

 

 

你可能感兴趣的:(网络框架,WKWebView)