Это довольно необычный запрос.Обычно вы либо пишете код для работы в автономном режиме (в этом случае вы хотите извлечь из кэша, верны ли сохраненные в кэше результаты или нет), либо вы подключены (в этом случае вы хотите получить новые данные, еслиэто недопустимо).
Я бы посоветовал вам по-настоящему долго и усердно подумать о том, действительно ли вы хотите принудительно проверять кеш, если вы не запускаете сетевые запросы.
При этомесли вы действительно хотите такое поведение, есть два способа сделать это:
- Использовать
NSURLRequestReturnCacheDataDontLoad
и самостоятельно проверить возраст кэшированного ответа. - Выполнить запрос внастраиваемый сеанс, используйте
NSURLRequestUseProtocolCachePolicy
, и в этом сеансе установите настраиваемый подкласс NSURLProtocol
, который переопределяет initWithTask:cachedResponse:client:
и startLoading
и вызывает URLProtocol:didFailWithError:
на указанном клиенте в начале его метода startLoading
.
Второй подход, вероятно, является наилучшим вариантом, поскольку вам не нужно беспокоиться о знании всех эзотерических правил проверки кэша.При сбое фактической загрузки кеш будет работать нормально, но как только он действительно начнет делать сетевой запрос, ваш пользовательский протокол предотвращает это.И поскольку вы зарегистрируете протокол только в этом конкретном сеансе (через массив protocolClasses
в конфигурации сеанса), он не нарушит работу сети в других сеансах.