Как кэшировать данные NSURLSession reponse


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

-(void)getcountrylist

{
    [self setSharedCacheForImages];

    NSString *urlString = @"https://restcountries.eu/rest/v1/all";

    NSURLSession *session = [self prepareSessionForRequest];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"GET"];

    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        if (!error) {
            NSArray *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
            dispatch_async(dispatch_get_main_queue(), ^{

               NSLog(@"Result new = %@",jsonResponse);

            });
        }
    }];
    [dataTask resume];

}

- (NSURLSession *)prepareSessionForRequest
{
    NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
    [sessionConfiguration setHTTPAdditionalHeaders:@{@"Content-Type": @"application/json", @"Accept": @"application/json"}];

    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];

    return session;
}

- (void)setSharedCacheForImages
{
    NSUInteger cashSize = 250 * 1024 * 1024;
    NSUInteger cashDiskSize = 250 * 1024 * 1024;
    NSURLCache *imageCache = [[NSURLCache alloc] initWithMemoryCapacity:cashSize diskCapacity:cashDiskSize diskPath:@"https://restcountries.eu/rest/v1/all"];

    [NSURLCache setSharedURLCache:imageCache];   
}
1 2

1 ответ:

Вы можете обрабатывать данные кэша с помощью метода NSMutableURLRequest class setCachePolicy. Есть много методов работы, соответственно посмотрите.

NSURLRequestReloadIgnoringCacheData: Этот метод игнорирует данные кэша и получает свежий обновленный ответ от сервера.

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

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

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

Еще немного проверьте здесь: Источник .

Использует:

NSURLRequest *Request = [NSURLRequest requestWithURL:[NSURL URLWithString:URLForService_Providers] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0];

Или

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[request setCachePolicy:NSURLRequestReloadIgnoringCacheData];