2011-10-25 1 views
3

私はJSONを取得し、インターネットが利用可能なときにキャッシュしたい、そうでないときにキャッシュを使いたいとします。私はこのコードを使用しましたが、オフラインのときはリクエストのresponseStringは常にnullです。 (ドキュメントは、サーバーが200または300応答を返す場合にのみ機能しますと言いASIDownloadCacheをオフラインで使用する

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
[request setDownloadCache:[ASIDownloadCache sharedCache]]; 

任意のアイデアネットワーク接続がありません時にキャッシュされたデータを取得するために

ありがとう

答えて

2

あなたがこれを使用することができます。?。:ディスク上のキャッシュへのパスを取得するには

[[ASIDownloadCache sharedCache] pathToCachedResponseDataForURL:] 

。何もキャッシュされたデータが存在しない場合、それはnilを返します。

+0

ありがとうございます!それは素晴らしい作品です! – Matthew

+0

サーバーがダウンしている場合、最後の手段として失効したキャッシュデータを返すために優れています –

2

要求が永続的に(アプリケーションセッションを介して)明示的にキャッシュされていることを確認する必要があります。これを設定するには、次の要求がキャッシュされ

[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; 

たら、それはすぐに限り、リモート接続が失敗したときに、あなたのダウンロードキャッシュのポリシーがバックキャッシュに収まるようにキャッシュされたデータを返します。 [ASIDownloadCache sharedCache]は既定のキャッシュポリシーに既に設定されている必要があります。このポリシーはこのケースを十分に処理します。

+0

サーバーがオフラインになり、データに* expires:*ヘッダーがある場合、これでは不十分です。リクエストはnilを返します。 –

+0

これで人々は実際には 'ASIHTTPRequest'を全く使用すべきではありません。 ['AFNetworking'](https://github.com/AFNetworking/AFNetworking)のようなものに切り替えてください。 – darvids0n

+0

@ darvids0n AFnetworkingは自動キャッシュをサポートしていますか? –