1

私のiPhoneに似たスレッドが見つかりました: NSURLCache on disk。私がやりたいことは基本的にほぼ同じです。WebページをiPhoneシミュレーターに保存して、オフラインで使用できるようにします(WebViewにロードします)。オンラインのときはそれらをダウンロード/キャッシュし、オフラインのときはキャッシュされたバージョンを使用して、オフラインで変更できるようにします。

私が 5.0 以降に読んだことによると、iPhone ではディスクへのキャッシュが許可されています。私の質問は、NSURLCache を使用してそれを行う方法ですか?

NSURLCache クラスのドキュメントをいくつか調べましたが、特定の回答や例が見つかりませんでした。

4

1 に答える 1

0

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

この例がお役に立てば幸いです。

于 2012-10-25T12:17:16.383 に答える