13

私が研究しているがあまり進歩していないいくつかのことについて、誰かが光を当ててくれることを願っています。

NSURLCache を利用して、iOS アプリ内で行った API 呼び出しに対してキャッシュされた応答を返したいと思います。デバイスがオンラインの場合、キャッシュされた応答が最新のものであればそれを返し、それ以外の場合はリモートから取得したいと考えています。デバイスがオフラインの場合、年齢に関係なく、キャッシュされた応答 (存在する場合) をすぐに返したいと思います。

を使用してAFNetworkingいます。私が行っている API 呼び出しは、私が制御するサーバーに対するものです。プロトコルは HTTPS です。現在、Cache-Control応答ヘッダーは"max-age=0, public". 現在、キャッシュ関連のリクエスト ヘッダーを設定していません (すべきでしょうか?)。要求のキャッシュ ポリシーをNSURLRequestReturnCacheDataDontLoadオフライン時に設定NSURLRequestUseProtocolCachePolicyし、オンライン時にはデフォルトを使用します。Cache.dbまた、ディスク上のデフォルトでリクエストとそのレスポンスを確認できます。ただし、オフラインの場合、すべてのリクエストが失敗します(キャッシュされたように見えるにもかかわらず、キャッシュされた応答は使用されません/返されます)。

http://nshipster.com/nsurlcache/sharedURLCacheに従って、 aを初期化し、 AFNetworkingブロックを次のようにdidFinishLaunchingWithOptions設定します。setCacheResponse

NSMutableDictionary *mutableUserInfo = [[cachedResponse userInfo] mutableCopy];
NSMutableData *mutableData = [[cachedResponse データ] mutableCopy];
NSURLCacheStoragePolicy storagePolicy = NSURLCacheStorageAllowed;
return [[NSCachedURLResponse alloc] initWithResponse:[cachedResponse レスポンス] data:mutableData userInfo:mutableUserInfo storagePolicy:storagePolicy];

このトピックに関するこれらの投稿や他の投稿を読みました。

http://petersteinberger.com/blog/2012/nsurlcache-uses-a-disk-cache-as-of-ios5/ http://blackpixel.com/blog/2012/05/caching-and-nsurlconnection.html

標準を使用する前にこの機能を成功裏に達成した人がいるかどうか疑問に思っていますNSURLCache(成功例にも興味がSDURLCacheありますが、Peter S. は、iOS5 の時点でディスク キャッシングがサポートされているためSDURLCache、もはや必要ではないと述べています。デフォルトの組み込みキャッシュ)。

前もって感謝します!

4

2 に答える 2

2

この投稿を見ましたか?

AFNetworking (AFHttpClient) オフライン モードが NSURLRequestReturnCacheDataDontLoad ポリシーで機能しない

iOS 6 のバグのようです。Robert Mao が投稿で述べた内容は次のとおりです。

要約された回避策は、NSURLRequestReturnCacheDataDontLoad ポリシーを使用する代わりに、キャッシュから応答を読み取ることです。

NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache]     cachedResponseForRequest:request];
if (cachedResponse != nil &&
    [[cachedResponse data] length] > 0)
{
    // Get cached data
    ....
}
于 2013-07-13T02:58:27.427 に答える
-4

すべての呼び出しが 100% GET であり、副作用や時間依存がない場合を除き、これは危険です。

于 2013-03-29T17:45:00.823 に答える