我发现了与我的 iphone 类似的线程: NSURLCache on disk。我想做的基本上是一样的:将网页存储在我的 iphone 模拟器上,以便我可以离线使用它们(将它们加载到 webview)。当我在线时,我正在下载/缓存它们,当我离线时,我使用缓存版本,以便我可以在离线时修改它们。
从我读到的 5.0 iPhone 允许在磁盘上缓存。我的问题是,如何使用 NSURLCache 来做到这一点?
我浏览了 NSURLCache 类的一些文档,但找不到任何具体的答案或示例。
我发现了与我的 iphone 类似的线程: NSURLCache on disk。我想做的基本上是一样的:将网页存储在我的 iphone 模拟器上,以便我可以离线使用它们(将它们加载到 webview)。当我在线时,我正在下载/缓存它们,当我离线时,我使用缓存版本,以便我可以在离线时修改它们。
从我读到的 5.0 iPhone 允许在磁盘上缓存。我的问题是,如何使用 NSURLCache 来做到这一点?
我浏览了 NSURLCache 类的一些文档,但找不到任何具体的答案或示例。
我最近在使用 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 标头的页面的较新版本。据我了解,这不是页面的永久存储,因为系统可以在某些情况下清除应用程序缓存文件夹。但是,在我的测试过程中,我发现该页面在应用程序关闭后可以离线使用,并且手机打开和关闭,适合我的需要。
我希望这个例子有帮助。