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

我希望這個例子有所幫助。