2016-12-31 17 views
0

UIWebViewをクリアしたいアプリが終了すると、URLCache、Javascript(ローカルストレージ)が終了します。Swiftアプリ終了時のWebviewキャッシュをクリアする

私はボタンプレスで次のコードを実装しました。この機能は、ボタンを押すときに意図したとおりに機能します。 AppDelegateのFUNC

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() 

} 

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

アプリケーションをクラッシュせずにこの機能を実現するための最良の方法をお勧めします。

ありがとうございます!

+0

didFinishLaunchingWithOptionsで消去してみませんか? – iYoung

+0

まったく同じエラーが表示されます。 –

答えて

0

このアプリケーションがVCで終了したときに限り、UIWebViewが表示されます。

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

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

は、WebViewの

ViewController().webView.stringByEvaluatingJavaScript(from: "localStorage.clear();")

WebViewの

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

のviewWillDisappearに明確なすべての問題はWebViewのインスタンスであるのインスタンスを持っていないのViewControllerのように見えるあなたがクローズしようとしているときがありませんアプリケーションを起動したときにApp Delegateの内部でWebviewをインスタンス化し、そのインスタンスを使用して特定のビューで表示する方法について説明します。この方法では、アプリケーションを閉じる前にclearEverythingを呼び出すたびにwebviewインスタンスを使用できるようにする必要があります。

+0

まだJavaScriptキャッシュが存在し、クリアされていません –

関連する問題