Внедрение пользовательского кеша для AFNetworking 3.x

Привет, я пишу IOS api для получения данных с сервера с помощью AFNetworking 3.x. Мой сервер не поддерживает кеширование. Этот заголовок этого сервера

Connection →Keep-Alive Content-Length →4603 Content-Type →text/html; charset=UTF-8 Date →Wed, 10 Aug 2016 04:03:56 GMT Keep-Alive →timeout=5, max=100 Server →Apache/2.4.18 (Unix) OpenSSL/1.0.1e-fips PHP/5.4.45 X-Powered-By →PHP/5.4.45 

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

Мой AFNetworking Singleton

 #pragma mark - Shared singleton instance + (ApiClient *)sharedInstance { static ApiClient *sharedInstance = nil; static dispatch_once_t oncePredicate; dispatch_once(&oncePredicate, ^{ NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; sharedInstance = [[self alloc] initWithBaseURL:[NSURL URLWithString:SINGPOST_BASE_URL] sessionConfiguration:sessionConfiguration]; return sharedInstance; } - (id)initWithBaseURL:(NSURL *)url { if ((self = [super initWithBaseURL:url])) { self.requestSerializer = [AFHTTPRequestSerializer serializer]; } return self; } 

Мой запрос JSON

 - (void)sendJSONRequest:(NSMutableURLRequest *)request success:(void (^)(NSURLResponse *response, id responseObject))success failure:(void (^)(NSError *error))failure { self.responseSerializer.acceptableContentTypes = [AFHTTPResponseSerializer serializer].acceptableContentTypes; self.requestSerializer.timeoutInterval = 5; self.requestSerializer.cachePolicy = NSURLRequestReturnCacheDataElseLoad; [self setDataTaskWillCacheResponseBlock:^NSCachedURLResponse * _Nonnull(NSURLSession * _Nonnull session, NSURLSessionDataTask * _Nonnull dataTask, NSCachedURLResponse * _Nonnull proposedResponse) { return [[NSCachedURLResponse alloc] initWithResponse:proposedResponse.response data:proposedResponse.data userInfo:proposedResponse.userInfo storagePolicy:NSURLCacheStorageAllowed]; }]; NSURLSessionDataTask *dataTask = [ApiClient.sharedInstance dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { if (error) { NSLog(@"Error URL: %@",request.URL.absoluteString); NSLog(@"Error: %@", error); failure(error); } else { NSDictionary *jsonDict = (NSDictionary *) responseObject; success(response,jsonDict); NSLog(@"Success URL: %@",request.URL.absoluteString); NSLog(@"Success %@",jsonDict); } }]; [dataTask resume]; } 

Как изменить следующий код, чтобы включить кеширование запроса и ответа (я хочу, чтобы ответ сохранялся как 10 секунд) (Или 1 день, если нет подключения к Интернету). Любая помощь очень ценится. Благодаря!

 [self setDataTaskWillCacheResponseBlock:^NSCachedURLResponse * _Nonnull(NSURLSession * _Nonnull session, NSURLSessionDataTask * _Nonnull dataTask, NSCachedURLResponse * _Nonnull proposedResponse) { return [[NSCachedURLResponse alloc] initWithResponse:proposedResponse.response data:proposedResponse.data userInfo:proposedResponse.userInfo storagePolicy:NSURLCacheStorageAllowed]; }]; 

Вместо

  return [[NSCachedURLResponse alloc] initWithResponse:proposedResponse.response 

делать

  NSMutableDictionary *dictionary = [proposedResponse.response.allHeaderFields mutableCopy]; dictionary[@"Cache-Control" = ... NSHTTPURLResponse *modifiedResponse = [[NSHTTPURLResponse alloc initWithURL:proposedResponse.response.URL statusCode:proposedResponse.response.statusCode HTTPVersion:@"HTTP/1.1" headerFields:modifiedHeaders]; [modifiedResponse return [[NSCachedURLResponse alloc] initWithResponse:modifiedResponse 

Обратите внимание, что невозможно получить версию HTTP из исходного запроса. Я почти уверен, что подал ошибку. Я также уверен, что это ни на что не влияет, и я не думаю, что он даже хранится в базовом объекте, поэтому, вероятно, это не имеет значения.

  • AFNetworking setImageWithURLRequest скачать прогресс
  • Установка User-Agent в AFNetworking
  • AFNetworking 3.0 setImageWithURLRequest скачать прогресс
  • Синхронные вызовы AFNetworking (например, / непохожий)
  • Подтверждение самоподписанного сертификата с использованием AFNetworking
  • Кэш-память AFNetworking не пуста в память
  • как отправлять данные json с использованием AFnetworking или NSJsonserialization
  • Отобразится изображение заполнителя AFNetworking + UIImageView, но не URL-адрес
  • Изображение AFNetworking post в вложенном json
  • AFOAuth2Client не может получить доступ к ресурсу
  • Можно ли выполнить завершение блокировки из ASIHTTPRequest / AFNetworking в фоновом потоке?
  • Interesting Posts
    Давайте будем гением компьютера.