18

特定のフォルダーにNSURLCacheを設定し(../../アプリケーションサポート/オフラインで、OSによってランダムに削除されないようにします)、NSURLRequestReturnCacheDataElseLoadポリシーを使用してNSURLRequestを送信します。

NSURLConnectionDelegateに準拠するクラスによって処理される応答が、キャッシュまたはネットからのものであることをどのように判断できますか?

4

1 に答える 1

8

問題についての良い記事はここにあります:

http://andrewmarinov.com/ioss-corenetwork-lying/

基本的に、NSHTTPURLResponseからのステータスコードは常に200です。

したがって、本当に知る必要がある場合は、リクエストを行う前に、アイテムがキャッシュにあることを確認できます

NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
NSHTTPURLResponse *httpCacheResponse = (NSHTTPURLResponse *)cachedResponse.response;

その場合は、変更された「etag」または「modified-date」ヘッダーを保存します

NSString* etag = httpCacheResponse.allHeaderFields[@"etag"];

次に、応答ハンドラーで、etagまたはmodified-dateが同じであることを確認します。もしそうなら、応答はキャッシュからでした!

于 2015-06-17T11:07:20.697 に答える