Проблема с кешем NSURLRequest iOS 7

в iOS 7 cachePolicy не работает, он просто кеширует загруженный json.

//URLRequest
        NSString *url = [NSString stringWithFormat:@"http://www.semhora.com/jsonparser/categories/categories_%d_test.json", _categoriesIndex];
        NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:url]
                                                  cachePolicy:NSURLCacheStorageNotAllowed
                                          timeoutInterval:60.0];

Как я могу запретить кэш в iOS 7?


person Marckaraujo    schedule 20.09.2013    source источник


Ответы (3)


Я столкнулся с той же проблемой и убедился, что установка cachePolicy = 0 вместо cachePolicy = NSURLCacheStorageNotAllowed решает проблему.

Для меня это тоже не имеет смысла, так как 0 соответствует NSURLCacheStorageAllowed.
Мы не можем просто установить его в 0, так как Apple, вероятно, исправит это в будущем выпуске.
Вы можете попробовать вызвать:

[NSURLCache sharedURLCache] removeCachedResponseForRequest:yourRequest] непосредственно перед отправкой запроса.

ОБНОВЛЕНИЕ: после дальнейших исследований я обнаружил, что код, который сломался, использовал неправильное перечисление. Взгляните на NSURLRequestCachePolicy в NSURLRequest.h. Это то, что вам нужно, и это объясняет, почему установка на 0 решила проблему для вас.

person Dan    schedule 24.09.2013

Я только что использовал:

//URLRequest
        NSString *url = [NSString stringWithFormat:@"http://www.semhora.com/jsonparser/categories/categories_%d_test.json", _categoriesIndex];
        NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:url]
                                                  cachePolicy:0
                                          timeoutInterval:60.0];

И теперь это работает, до сих пор не получил ответа от форума разработчиков Apple, почему это происходит.

person Marckaraujo    schedule 23.09.2013
comment
это должно блокировать или разрешать кэширование? - person David; 20.02.2017

Правильное перечисление для политики кеша:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:downloadURL cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];

Если у вас более 3G, некоторые провайдеры используют кэширование, даже если вы отключили его в своем NSMutableURLRequest, поэтому, если политика кэширования не работает, установите для поля cache-control поля HTTP-заголовка значение no-cache.

[request setValue:@"no-cache" forHTTPHeaderField:@"cache-control"];
person Benpaper    schedule 13.07.2014
comment
Имейте в виду, что начиная с iOS 8.1 политика кэширования NSURLRequestReloadIgnoringLocalAndRemoteCacheData по-прежнему не реализована, как описано в заголовочном файле NSURLRequest в структуре Foundation. - person Thomas Verbeek; 05.12.2014