2013-11-02 9 views
6

In meinem Projekt verwende ich AFNetworking zum Herunterladen von Daten aus dem Internet. Ich nutze NSURLRequestUseProtocolCachePolicy auf meinem NSURLRequest, um zwischengespeicherte Benutzerdaten zu liefern (wenn Cache gültig ist). Dies ist mein Code:AFNetworking und Antwort-Cache-Behandlung

Verfahren anfordern:

// 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]; 

Inhalts Methode Typen

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

ServerFactory erhalten Methoden

+ (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; 
} 

Nun möchte ich auf neue Logik zu überführen möchten:

  • Daten Get
  • Wenn Daten im Cache zwischengespeichert gültig
    • Benutzer Serve mit zwischengespeicherten Daten
    • Versand neue Anforderung mit If-Modified-Since Header
    • Server respondes 304 nicht geändert zu abgerufenen Daten im Cache-Zeitstempel gesetzt wenn der Cache weiterhin OK oder 200 OK, wenn neue Daten
    • Update UI mit neuen Daten
  • wenn Cache-Daten ab pired
    • Neue Daten aus Web-

Also im Grunde würde Ich mag im Cache gespeicherten Daten dienen aber überprüfen, ob meine Daten im Cache noch gültig auf dem Server sind, oder wenn es neue Daten ist zum Download bereit. Gibt es einen Weg, dies zu erreichen? Ich habe versucht mit setCacheResponseBlock auf AFHTTPRequestOperation, aber ich kann nicht zwischengespeicherte Daten Zeitstempel. Gibt es einen "klügeren" Weg, dies zu tun?

+0

Ich benutze AFNetworking 2.0 – paxx

+0

Überprüfen Sie dieses Thema, es könnte Ihnen helfen: http://StackOverflow.com/a/21556002/514181 – Darrarski

Antwort