Подтвердить что ты не робот

Как узнать, вызван ли запрос NSURLResponse из кеша?

Я устанавливаю NSURLCache в определенной папке (../../Application Support/Offline, поэтому она не будет удалена случайно ОС), затем я отправляю NSURLRequest с политикой NSURLRequestReturnCacheDataElseLoad.

Как я могу сказать, что ответ, обработанный классом, соответствующим NSURLConnectionDelegate, поступает из кеша или из сети?

4b9b3361

Ответ 1

Хорошая статья здесь о проблеме:

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 или дата изменения одинаковы. Если это так, ответ был получен из кеша!