What is the best practice for clearing the cache directory in iOS?

I am loading a webpage in WKWebview using a cache policy NSURLRequestReturnCacheDataElseLoad. I don't need to clear the cache unless the server explicitly tells me to do this. But I ran into the problem of clearing the cache as soon as the server tells me to do this.

Most of the answers and articles show what removeAllCachedResponsesworks, although there are a few complaints circulating around about NSURLCache not working properly with NSURLSession or UIWebView. I could not get it to work for me in either iOS 8.4 or 9.3 simulators.

So, I used the following code to clear all files in the cache directory. The cached website files that I use in my WKWebview are located in Application / Cache / bundleidentifier. Although, I am trying to delete all the files that I can. When I run the code, I get an error message that tries to delete / Snapshots. Now it made me wonder what other files in the cache directory should I intervene? I know that the SDWebImage cache and several other files are in this directory. But I still need to clear the SDWebImage cache.

Here is the code I used to clear the cache directory:

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

Now, is this a good practice? Are there any obvious methods that I'm missing to achieve the same?

+4
2

. , - , .

Apple:

, . .

+2

. removeDataOfTypes WKWebsiteDataStore, .

@Ashildr Swift 3:

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

Source: https://habr.com/ru/post/1651591/


All Articles