NSURLRequest: всегда возвращает NSCachedURLResponse.

Я использую AfNetworking, я запрашиваю новые данные, но продолжаю получать кешированный результат. Поэтому, если я нахожусь в VC, который показывает данные, возвращаюсь к корню и изменяю данные на моем сервере, я затем жду 30 секунд, и когда я возвращаюсь в VC, я увижу старые данные. Если я нажму URL-адрес в браузере, я увижу правильные данные. Если я повторно запущу приложение, я увижу изменения в данных.

Мой ответ с моего сервера отправляет обратно заголовок управления кешем: Cache-Control:max-age=10, public

Из того, что я могу сказать, это то, что я всегда всегда получаю ответ NSCachedURLResponse и что кеш не слушает мою политику управления кешем.

В моем AppDelegate я установил свой SharedURLCache:

NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:8 * 1024 * 1024 diskCapacity:8 * 1024 * 1024 diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];

Как я установил URLRequest:

NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];

Я больше ничего не делаю с NSURLCache.

Любые идеи?

БуРейнджер


person BooRanger    schedule 06.09.2013    source источник


Ответы (1)


Описанное вами поведение - это именно то, что я ожидал от кода, который вы опубликовали. Вы пробовали использовать NSURLRequestReloadIgnoringLocalAndRemoteCacheData вместо NSURLRequestUseProtocolCachePolicy? Согласно это NSURLRequestUseProtocolCachePolicy означает:

Указывает, что логика кэширования, определенная в реализации протокола, если таковая имеется, используется для конкретного запроса на загрузку URL-адреса. Это политика по умолчанию для запросов загрузки URL.

Поэтому, если вы хотите, чтобы он всегда загружался с сервера, вы должны использовать NSURLRequestReloadIgnoringLocalAndRemoteCacheData, который описывается как:

Указывает, что не только данные локального кеша следует игнорировать, но и что прокси-серверы и другие промежуточные звенья должны быть проинструктированы игнорировать свои кеши, насколько это позволяет протокол.

person ipmcc    schedule 06.09.2013
comment
У меня сложилось впечатление, что если я установлю NSURLRequestUseProtocolCachePolicy, он будет использовать мой headerField Cache-Control для установки кеша. - person BooRanger; 06.09.2013
comment
NSURLRequestReloadIgnoringLocalAndRemoteCacheData, похоже, тоже не работает, так что, возможно, я что-то упустил в другом месте... Ура - person BooRanger; 06.09.2013
comment
Прошло более 10 секунд? - person ipmcc; 06.09.2013
comment
Тот факт, что NSURLRequestReloadIgnoringLocalAndRemoteCacheData не работает, меня немного удивляет. Если вы используете NSURLConnection явно вместо AFNetworking, у вас все еще есть проблема? - person ipmcc; 06.09.2013
comment
Тогда зачем кеширование, если его игнорировать? - person Iulian Onofrei; 23.07.2015