我最近在一個應用程序中使用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標題檢查頁面的較新版本。據我所知,這不是永久存儲頁面,因爲系統可以在某些情況下清除應用程序緩存文件夾。然而,在我的測試過程中,我發現該應用程序關閉後可以離線使用,電話打開和關閉,可以滿足我的需求。
我希望這個例子有所幫助。