AFNetworking und-Antwort cache-handling

In meinem Projekt bin ich mit AFNetworking für den Download von Daten aus dem web. Ich bin Nutzung NSURLRequestUseProtocolCachePolicy auf meine NSURLRequest zu dienen, Benutzer zwischengespeicherte Daten (wenn der cache gültig ist). Das ist mein code:

Request-Methode:

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

Akzeptablen content-Typen-Methode

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

ServerFactory get-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 zum übergang auf die neue Logik:

  • Bekommen zwischengespeicherten Daten
  • Wenn sich die zwischengespeicherten Daten gültig
    • Dienen Benutzer mit zwischengespeicherten Daten
    • Versand neue Anfrage mit If-Modified-since-header festgelegt abgerufen zwischengespeicherten Daten Zeitstempel
    • Server respondes 304 Nicht Geändert werden, wenn der cache noch OK, oder 200 OK, wenn es neue Daten
    • Update-Benutzeroberfläche mit neuen Daten
  • Wenn die Daten im cache abgelaufen
    • Neue Daten aus dem web

Also im Grunde möchte ich zu dienen die zwischengespeicherten Daten aber überprüfen, ob meine zwischengespeicherten Daten noch auf dem server gültig ist, oder wenn es neue Daten zum download. Gibt es eine Möglichkeit, dies zu erreichen? Ich habe versucht, mit setCacheResponseBlock auf AFHTTPRequestOperation aber ich kann nicht get-Cache-Daten-Zeitstempel. Ist es ein "schlauer" Weg, dies zu tun?

InformationsquelleAutor paxx | 2013-11-02
Schreibe einen Kommentar