我使用NSURLRequestReturnCacheDataElseLoad
缓存策略将网页加载到WKWebview。除非清除缓存,否则我无需清除缓存
服务器显然告诉我这样做。但是,一旦服务器告诉我这样做,我就很难清除缓存。
大多数答案和文章表明removeAllCachedResponses
有效,尽管有几个投诉在传播
关于NSURLCache与NSURLSession或UIWebView无法正常工作。我无法在iOS 8.4或9.3模拟器中使用它。
所以我使用以下代码以编程方式清除缓存目录中的所有文件。我在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)
}
}
现在,这是一个很好的做法吗?我是否有任何明显的方法可以实现同样的目标?
答案 0 :(得分:5)
你的代码很棒。我试图在WKWebsiteDataStore中使用removeDataOfTypes,但它没有用。
这是Swift 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)
}
}
答案 1 :(得分:2)
清除缓存目录完全没问题。是的,迭代内容是它的完成方式。
这就是Apple所说的:
使用此目录编写您的任何特定于应用程序的支持文件 应用程序可以轻松地重新创建。您的应用程序通常负责 管理此目录的内容以及添加和删除 文件根据需要。