Как кэшировать данные 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 ответ:
Вы можете обрабатывать данные кэша с помощью метода
NSMutableURLRequest
classsetCachePolicy
. Есть много методов работы, соответственно посмотрите.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];