Всегда возвращать кешированные данные в NSURLSessionDataTask

Я столкнулся с очень странной проблемой при использовании NSURLSessionDataTask для отправки запроса JSON на сервер.

Первый запрос проходит, и я получаю правильный ответ JSON, когда я делаю второй запрос, я всегда возвращаю старый ответ, и сервер никогда не получает запрос. Даже если я включу режим полета, NSURLSessionDataTask работает, и я снова получаю старый ответ.

Это код, который я использую:

- (void)getJSONFromURL:(NSURL*)url identifierCode:(NSInteger)code
{
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request addValue:[DataController sharedInstance].currentUser.userToken forHTTPHeaderField:@"User-Token"];
[request setHTTPMethod:@"GET"];

if (![SVProgressHUD isVisible])
    [SVProgressHUD show];

NSURLSessionDataTask *postTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error){
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

    [self handleResponse:httpResponse withJSON:json identifierCode:code];

    dispatch_async(dispatch_get_main_queue(), ^{
        [SVProgressHUD dismiss];
    });
}];

[postTask resume];

}


person gpichler    schedule 15.05.2014    source источник


Ответы (2)


Я нашел проблему, я не знаю, почему это изменилось, потому что мне никогда не приходилось устанавливать это свойство раньше. Во всяком случае, я установил configuration.URLCache = NULL;, и теперь все снова работает нормально.

person gpichler    schedule 15.05.2014
comment
аргх. Это меня тоже достало. Конфигурация сеанса по умолчанию использует постоянный кэш на диске (кроме случаев, когда результат загружается в файл) и сохраняет учетные данные в цепочке ключей пользователя. Он также сохраняет файлы cookie (по умолчанию) в том же общем хранилище файлов cookie, что и классы NSURLConnection и NSURLDownload. - person hyperspasm; 20.12.2014

вы можете установить

request.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;

чтобы отключить его по запросу

person Peter Lapisu    schedule 05.12.2016