最近、MonotouchforiPhoneで開発していたアプリにオフラインサポートを実装しました。これが私がやった方法です。
まず、次のようにアプリケーションキャッシュを取得/作成しました。
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ヘッダーを含む新しいバージョンのページを確認しました。私が理解している限り、これはページの永続的なストレージではありません。システムは特定の状況でアプリケーションのキャッシュフォルダーをクリアできるからです。ただし、テスト中に、アプリケーションを閉じた後、電話のオンとオフを切り替えると、自分のニーズに合ったページがオフラインで利用できることがわかりました。
この例がお役に立てば幸いです。