应用终止时的Swift Clear webview缓存

时间:2016-12-31 07:37:57

标签: javascript ios uiwebview swift3

我想在应用终止时清除 UIWebView URLCache,Javascript(本地存储)

我在按下按钮时实现了以下代码。按下按钮时功能按预期工作。

func clearEverything() {
    print("cleared")
    URLCache.shared.removeAllCachedResponses()
    URLCache.shared.diskCapacity = 0
    URLCache.shared.memoryCapacity = 0

    webView.stringByEvaluatingJavaScript(from: "localStorage.clear();")
    let cookieJar = HTTPCookieStorage.shared
    for cookie in cookieJar.cookies! {
        cookieJar.deleteCookie(cookie)
    }
    UserDefaults.standard.synchronize()

}

AppDelegate 的func applicationWillTerminate 中,我使用了以下代码:

func applicationWillTerminate(_ application: UIApplication) {
    print("app terminated")
    clearEverything()
}

func clearEverything() {
    print("cleared from App Delegate")
    URLCache.shared.removeAllCachedResponses()
    URLCache.shared.diskCapacity = 0
    URLCache.shared.memoryCapacity = 0

    ViewController().webView.stringByEvaluatingJavaScript(from: "localStorage.clear();")
    let cookieJar = HTTPCookieStorage.shared
    for cookie in cookieJar.cookies! {
        cookieJar.deleteCookie(cookie)
    }
    UserDefaults.standard.synchronize()

}

每当我终止应用程序时,都会收到以下错误:

enter image description here

enter image description here

建议我在不崩溃应用程序的情况下实现此功能的最佳方法。

谢谢!

2 个答案:

答案 0 :(得分:0)

看起来像ViewController没有webview的实例

  。

的ViewController()webView.stringByEvaluatingJavaScript(来自:   " localStorage.clear();&#34)

清除webview中viewWillDisappear中的所有内容

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    // codes
}

问题是,当您关闭应用程序时,webview实例不存在,那么当您启动应用程序时,如何在App Delegate内部实例化Webview,并使用该实例在特定视图中显示。这样每次都可以使用webview实例,以便在关闭应用程序之前调用clearEverything。

答案 1 :(得分:0)

我得到了这个功能,但只有当应用程序以VC终止时才会显示 UIWebView

override func viewDidLoad() { 
NotificationCenter.default.addObserver(self, selector: #selector(applicationWillTerminate), name: NSNotification.Name.UIApplicationWillTerminate, object: nil)
}

func applicationWillTerminate() {
    clearBtnPressed(Any.self)
}