如何使用EVURLCache在PreCache中加载UIWebView

时间:2017-04-10 14:24:30

标签: ios swift caching

我尝试创建一个iOS应用程序,它有一个UIWebview,我想在其中加载网站。我尝试使用EVURLCache进行缓存。但它不会从我的项目中的PreCache文件夹加载。

应用程序第一次运行正常。但是当我再次尝试再次运行时,它只显示空白屏幕。我认为应用程序尝试从缓存加载页面,但应用程序无法找到其缓存..

我使用https://github.com/evermeer/EVURLCache进行缓存。我通过pod安装

MainVC

import UIKit

class MainVC: UIViewController, UIWebViewDelegate {
    @IBOutlet weak var webView: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        webView.delegate = self

        let url = URL(string: BASE_URL)
        let request = URLRequest(url: url!)

        webView.loadRequest(request)
    }


    func webViewDidStartLoad(_ webView: UIWebView) {
        print("*****************")
        print(" webViewDidStartLoad(")
        print("*****************")
    }

    func webViewDidFinishLoad(_ webView: UIWebView) {
        print("*****************")
        print("webViewDidFinishLoad")
        print("*****************")
    }

}

的AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        EVURLCache.LOGGING = true // We want to see all caching actions
        EVURLCache.MAX_FILE_SIZE = 26 // We want more than the default: 2^26 = 64MB
        EVURLCache.MAX_CACHE_SIZE = 30 // We want more than the default: 2^30 = 1GB
        EVURLCache.activate()

        return true
    }

我找到了缓存文件夹

04/10/2017 18:01:41:952 FedNet)[1696:.] EVURLCache.swift(245) storeCachedResponse(_:for:):
    CACHE save file to Cache  : /Users/apple/Library/Developer/CoreSimulator/Devices/BF935382-BD49-4F37-85A1-C3FA0E1B094B/data/Containers/Data/Application/AF33E59E-1BB4-46CC-9236-BEB42F53D606/Documents/Cache/www.fednetbank.com/corp/l001/consumer/theme/login/img/banner.jpg

enter image description here

当我使用PreCache文件夹运行应用程序时,它会给我一个空白屏幕....

1 个答案:

答案 0 :(得分:1)

这可能是由重定向引起的。重定向不会被缓存。我尝试用协议解决这个问题,但我已经注意到它有时会失败。您可以尝试从EVURLCache中删除以下行,然后再试一次吗?

URLProtocol.registerClass(EVURLProtocol.self)