2016-08-17 11 views
3

NSURLRequestReturnCacheDataElseLoadキャッシュポリシーを使用してWKWebviewにウェブページを読み込みます。 サーバが私に明示的に指示しない限り、キャッシュをクリアする必要はありません。しかし、サーバからの指示があったらキャッシュのクリアに問題があります。それ。iOSでキャッシュディレクトリを消去するためのベストプラクティスは何ですか?

NSURLSessionかのUIWebView .Iと正常に動作していない周りの NSURLCacheについての循環いくつかの苦情がありますが解答や記事のほとんどは、それは私のためのいずれかのiOS 8.4または9.3シミュレータで動作させることができなかった、というremoveAllCachedResponses作品を示唆。

私は次のコードを使用して、キャッシュディレクトリ内のすべてのファイルをプログラムでクリアしました。 WKWebview で使用するウェブサイトのキャッシュファイルは、Application/Cache/bundleidentifierにあります。しかし、私はすべてのファイルを削除しようとすると、私はコードを実行すると、私は/スナップショット を削除しようとしているエラーを取得します。これは私が改ざんすべきではないキャッシュディレクトリ内のいくつかの他のファイルですか? 私はSDWebImageキャッシュを知っていますが、このディレクトリにはその他のファイルはほとんどありません。しかし、私はSDWebImageキャッシュをクリアする必要があります。ここで

私はキャッシュディレクトリをクリアするために使用されるコードです:

public func clearCache(){ 
    let cacheURL = NSFileManager.defaultManager().URLsForDirectory(.CachesDirectory, inDomains: .UserDomainMask).first! 
    let fileManager = NSFileManager.defaultManager() 
    do { 
     // Get the directory contents urls (including subfolders urls) 
     let directoryContents = try NSFileManager.defaultManager().contentsOfDirectoryAtURL(cacheURL, includingPropertiesForKeys: nil, options: []) 
     for file in directoryContents { 
      do { 
        try fileManager.removeItemAtURL(file) 
       } 
       catch let error as NSError { 
        debugPrint("Ooops! Something went wrong: \(error)") 
       } 

      } 
    } catch let error as NSError { 
     print(error.localizedDescription) 
    } 
} 

さて、これは良い習慣ですか?同じことを達成するために欠けている明らかな方法はありますか?

答えて

2

キャッシュディレクトリをクリアするのは問題ありません。そして、はい、内容を反復することはそれが行われる方法です。

は、あなたの アプリが簡単に再作成することができます任意のアプリケーション固有のサポートファイルを書き込むために、このディレクトリを使用します。ここでは

は、Appleが言うことです。あなたのアプリは、通常、このディレクトリの内容を管理し、必要に応じて ファイルを追加および削除することを、 が担当します。

File System Overview

2

あなたのコードは素晴らしいです。 WKWebsiteDataStoreでremoveDataOfTypesを使用しようとしましたが、動作しませんでした。

これはスウィフト3に@Ashildrソリューションです:

func clearCache(){ 
    let cacheURL = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first! 
    let fileManager = FileManager.default 
    do { 
     // Get the directory contents urls (including subfolders urls) 
     let directoryContents = try FileManager.default.contentsOfDirectory(at: cacheURL, includingPropertiesForKeys: nil, options: []) 
     for file in directoryContents { 
      do { 
       try fileManager.removeItem(at: file) 
      } 
      catch let error as NSError { 
       debugPrint("Ooops! Something went wrong: \(error)") 
      } 

     } 
    } catch let error as NSError { 
     print(error.localizedDescription) 
    } 
} 
関連する問題