AFNetworking y event handling caching de respuesta

En mi proyecto utilizo AFNetworking para download datos de la web. Estoy aprovechando NSURLRequestUseProtocolCachePolicy en mi NSURLRequest para NSURLRequest datos almacenados en caching del usuario (si el caching es válido). Este es mi código:

Método de request:

 // create NSURL request NSURLRequest *request = [ServerFactory URLGETRequestWithURL:url]; //creating AFHTTPRequestOperation AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; //set serializaer operation.responseSerializer = [AFJSONResponseSerializer serializer]; //need to specify that text is acceptable content type, otherwise the error occurs operation.responseSerializer.acceptableContentTypes = [MyRepository acceptableContentTypes]; //running fetch request async [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { //parse data } failure:^(AFHTTPRequestOperation *operation, NSError *error) { //error handling }]; //start async operation [operation start]; 

Método de types de contenido aceptable

 + (NSSet *)acceptableContentTypes { return [NSSet setWithObjects:@"application/json", @"text/plain", @"text/html" ,nil]; } 

ServerFactory get methods

 + (NSURLRequest *)URLGETRequestWithURL:(NSString *)URL { NSMutableURLRequest *request = [[ServerFactory URLRequestWithURL:URL] mutableCopy]; [request setCachePolicy:NSURLRequestUseProtocolCachePolicy]; [request setHTTPMethod:@"GET"]; return request; } + (NSURLRequest *)URLRequestWithURL:(NSString *)URL { // creating NSURL to give to NSURLRequest NSURL *theURL = [NSURL URLWithString:URL]; //adding service version in http header NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:theURL]; [request addValue:HTTP_HEADER_VERSION_VALUE forHTTPHeaderField:HTTP_HEADER_VERSION_NAME]; //returing request return request; } 

Ahora me gustaría hacer una transición a una nueva lógica:

  • Obtener datos en caching
  • Si los datos almacenados en caching son válidos
    • Servir al usuario con datos almacenados en caching.
    • Enviar una request nueva con el encabezado If-Modified-Since configurado para recuperar el sello de time de datos en caching
    • El server responde 304 No se modifica si la memory caching todavía está en Aceptar, o 200 OK si hay nuevos datos
    • Actualice la interfaz de usuario con nuevos datos
  • Si los datos de caching expiraron
    • Obtenga nuevos datos de la web

Entonces, básicamente, me gustaría publicar datos almacenados en caching, pero verifique si los datos almacenados en caching siguen siendo válidos en el server o si hay nuevos datos para download. ¿Hay una manera de lograr esto? Intenté con setCacheResponseBlock en AFHTTPRequestOperation pero no puedo get la timestamp de datos almacenados en caching. ¿Hay una forma "más inteligente" de hacer esto?

Echa un vistazo a AFNetworking: ¿Cómo saber si la respuesta está utilizando el caching o no? 304 o 200

"Encontré una manera de save la date de modificación asociada con la request, y comparo esta date cuando AFNetWorking me responde.

no tan limpio como pretendo, pero funciona … "