【问题标题】:monotouch/objective c iphone 5.x how to cache web pages using NSURLCache?monotouch/objective c iphone 5.x 如何使用 NSURLCache 缓存网页?
【发布时间】:2012-08-08 08:03:15
【问题描述】:

我发现了与我的iphone: NSURLCache on disk 类似的线程。我想做的基本上是一样的:将网页存储在我的 iphone 模拟器上,以便我可以离线使用它们(将它们加载到 webview)。当我在线时,我正在下载/缓存它们,当我离线时,我使用缓存版本,以便我可以在离线时修改它们。

从我从 5.0 开始读到的内容,iPhone 允许在磁盘上缓存。我的问题是,如何使用 NSURLCache?

我浏览了一些 NSURLCache 类的文档,但找不到任何具体的答案或示例。

【问题讨论】:

    标签: objective-c ios caching xamarin.ios nsurlcache


    【解决方案1】:

    我最近在使用 Monotouch for iPhone 开发的应用程序中实现了离线支持。我就是这样做的。

    首先,我得到/创建了我的应用程序缓存,如下所示:

    NSUrlCache _cache = NSUrlCache.SharedCache;
    

    当我想请求一个 URL 时,我会检查我是否在应用程序缓存中存储了响应,否则我会发送请求。

    NSUrl url = new NSUrl ("http://whatever.com");
    NSUrlRequest request = new NSUrlRequest (url);
    NSUrlCachedResponse cacheResponse = _cache.CachedResponseForRequest (checkCacheRequest);
    
    // check whether cache had response (would be null otherwise)
    if (cacheResponse is NSCachedUrlResponse) {
        // cache has response load the cached page in the UIWebView
        _webView.loadData (cacheResponse.Data, "text/html", "UTF-8", url);
    } else {
        //cache does not have response send a asynchronous request
        NSUrlConnection.FromRequest(request, myDelegate);
    }
    

    委托myDelegate 是 NSUrlConnectionDelegate 的子类,应该处理从请求中收到的响应,但是您想实现它。我不需要手动将响应添加到缓存中,因为这是由FromRequest 自动完成的。

    我已更改此方法以允许我的应用显示缓存页面,同时在我的请求中检查带有 If-Modified-Since 标头的页面的较新版本。据我了解,这不是页面的永久存储,因为系统可以在某些情况下清除应用程序缓存文件夹。但是,在我的测试过程中,我发现该页面在关闭应用程序以及打开和关闭手机后可以离线使用,符合我的需求。

    我希望这个例子有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-16
      • 2014-09-27
      • 2011-10-11
      • 2014-03-24
      • 1970-01-01
      • 2013-11-24
      相关资源
      最近更新 更多