2013-09-20 6 views
4

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

//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?

ответ

6

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

//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]; 

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

+0

следует ли блокировать или разрешать кеширование? – David

+0

@David. блок, но имейте в виду, что это был 2013 год. – Marckaraujo

7

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

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

[NSURLCache sharedURLCache] removeCachedResponseForRequest:yourRequest] как раз перед началом запроса.

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

+0

Я попытаюсь использовать removeecacheResponse ... – Marckaraujo

2

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

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

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

[request setValue:@"no-cache" forHTTPHeaderField:@"cache-control"]; 
+5

Имейте в виду, что с iOS 8.1 политика кэша 'NSURLRequestReloadIgnoringLocalAndRemoteCacheData' по-прежнему не реализована, как описано в файле заголовка NSURLRequest в Foundation фреймворк. –

+0

ты спас мой день. – nidhin

Смежные вопросы