2012-08-08 61 views
1

我发现了类似的线程iphone: NSURLCache on disk。我想要做的基本上是几乎相同的:在我的iPhone模拟器上存储网页,以便我可以脱机使用它们(将它们加载到webview)。当我在线时,我正在下载/缓存它们,当我离线时,我使用缓存版本,以便在离线时修改它们。monotouch/objective c iphone 5.x如何使用NSURLCache缓存网页?

从我读过的5.0以来,iPhone允许在磁盘上进行缓存。我的问题是,如何使用NSURLCache做到这一点?

我经历了一些NSURLCache类的文档,但我找不到任何具体的答案和例子。

回答

0

我最近在一个应用程序中使用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标题检查页面的较新版本。据我所知,这不是永久存储页面,因为系统可以在某些情况下清除应用程序缓存文件夹。然而,在我的测试过程中,我发现该应用程序关闭后可以离线使用,电话打开和关闭,可以满足我的需求。

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