2016-08-17 3 views
3

NSURLRequestReturnCacheDataElseLoad 캐시 정책을 사용하여 WKWebview에 웹 페이지를로드합니다. 서버에서 명시 적으로 캐시를 지우지 않으면 캐시를 지울 필요가 없습니다. 서버에서 수행하라는 메시지가 나타나면 캐시를 지우는 데 문제가 있습니다. 그것. NSURLCache는 아이폰 OS 8.4 또는 9.3 시뮬레이터에 하나 나를 위해 작동하도록 얻을 수 없었다 NSURLSession 또는있는 UIWebView .I 제대로 작동하지에 대해 주위 순환 여러 불만이 있기는하지만iOS에서 캐시 디렉토리를 지우는 가장 좋은 방법은 무엇입니까?

답변 및 기사의 대부분은, 그 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

캐시 디렉토리를 지우는 것이 좋습니다. 그리고 네, 내용을 반복하는 것은 그것이 이루어지는 방식입니다.

여기에 애플이 무슨 말 :

사용이 디렉토리가 응용 프로그램을 쉽게 다시 만들 수있는 응용 프로그램 별 지원 파일을 작성 할 수 있습니다. 앱에 일반적으로이 디렉토리의 내용을 관리하고 파일을 추가 및 삭제해야 할 책임이 있습니다.

File System Overview

2

코드는 중대하다. WKWebsiteDataStore에서 removeDataOfTypes를 사용하려고했지만 작동하지 않았습니다.

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) 
    } 
} 
:

스위프트 3 @Ashildr 솔루션
관련 문제