我正在尝试在iOS8的UIWebView中显示PDF文件。这是我的代码:
func showPDF(){
let docsDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let pdfFilePath = docsDir.stringByAppendingPathComponent("PDF/MobileHIG.pdf")
let url = NSURL.fileURLWithPath(pdfFilePath)!
let request = NSURLRequest(URL: url)
webView.loadRequest(request)
self.view.addSubview(webView)
//constraints
webView.setTranslatesAutoresizingMaskIntoConstraints(false)
let height = NSLayoutConstraint(item: webView, attribute: .Height, relatedBy: .Equal, toItem: view, attribute: .Height, multiplier: 1, constant: 0)
let width = NSLayoutConstraint(item: webView, attribute: .Width, relatedBy: .Equal, toItem: view, attribute: .Width, multiplier: 1, constant: 0)
view.addConstraints([height, width])
}
这在iOS7中运行得很好。在iOS8中,PDF也会显示,但是,我会收到以下警告:
DiskImageCache:无法解析旧目录的绝对路径。
创建UIWebView时会发生这种情况。它与NSURLRequest没有任何关系。进一步调查了解到,在app沙箱的'temp'文件夹中,缓存文件夹就像'DiskImageCache-UiIk6kzM',其中创建了一个缓存文件。这也发生在iOS7中,但区别在于iOS7中它读取了创建的缓存文件的内容,而在iOS8中,创建了一个带有新缓存文件的新文件夹。每次启动应用程序并创建新的webView时都会发生这种情况。结果是一个巨大的数据泄漏:'temp'文件夹增长和增长。
同时,我尝试通过实现此代码来禁用UIWebView缓存:
NSUserDefaults.standardUserDefaults().setBool(false, forKey: "WebKitOfflineWebApplicationCacheEnabled")
NSUserDefaults.standardUserDefaults().synchronize()
这并没有禁用缓存,因为一旦创建了UIWebView,就会覆盖userDefaults。新的plist文件保存在Library / Preferences文件夹中,其中WebKitOfflineWebApplicationCacheEnabled设置为true。
我的问题:
描述的缓存行为是否正常,我错过了什么?或者这是我应该向Apple提交的错误?
是否还有其他选项可以禁用UIWebView缓存而不会为整个应用禁用NSCache?