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?
- Ich bin mit AFNetworking 2.0
- Überprüfen Sie heraus dieses Thema, es könnte dir helfen: stackoverflow.com/a/21556002/514181
Du musst angemeldet sein, um einen Kommentar abzugeben.
Check-out AFNetworking : Wie Sie wissen, wenn die Antwort über den cache oder nicht ? 304 oder 200
"Ich fand einen Weg durch die Einsparung änderung-Datum assoziieren mit der Anfrage, und ich Vergleiche dieses Datum, wenn AFNetWorking Antworten auf mich.
nicht so sauber wie ich es vorhabe, funktioniert aber..."