UIWebView DiskImageCache在iOS8中无法正常工作

时间:2015-02-27 11:18:28

标签: ios swift caching uiwebview

我正在尝试在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?

0 个答案:

没有答案