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