2009-12-05 1 views
7

Ich benutze und eine ASINetworkQueue in einer iPhone App, um einige 100k XML-Dateien und viele Thumbnails von einem Webdienst abzurufen. Ich möchte die Anfragen im Stil von NSURLCache zwischenspeichern. ASI scheint das Caching nicht so zu unterstützen, wie es ist, und ich habe mir den Code angeschaut und fällt auf C, um die Anfragen zu erstellen. Daher erschien es schwierig, die Ebene NSURLCache einzufügen.Wie kann ich HTTP-Anfrage-Caching zu einer Anwendung mit ASIHTTPRequests hinzufügen?

Was ist der beste Weg, dies zu implementieren?

Antwort

0

NSURLConnection unterstützt Caching im Stil von NSURLCache, und hinter den Kulissen wird viel Arbeit für Sie erledigt. Es hat sogar einen schönen Delegatmethode, dass Sie die cachedResponse manipulieren lassen:

- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse

1

Sie könnten Ihre eigene Caching bieten, bevor sie in ASI-Code fallen nach unten.

Wickeln Sie Ihren ASI-Code in einer Klasse, die eine Methode hat:

-(NSString *)getContentFor:(NSURL *)url

Diese Methode überprüft zuerst eine interne NSDictionary zu sehen, ob es einen Schlüssel vorhanden für die angegebene URL hat. Ist dies der Fall, wird das mit dem Schlüssel gespeicherte Objekt zurückgegeben.

Wenn nicht, führt es die normale ASIRequest aus. Wenn die Anforderung vom Server empfangen wird, speichert sie sie als Zeichenfolge in Ihrem Wörterbuch mit dem Schlüssel der URL.

Natürlich müssen Sie mit asynchronen Anfragen und dem Verfall von alten Anfragen vorsichtig umgehen.

1

Wer fragt, wie sie dies mit ASIHTTPRequest direkt tun können, kann dieses branch des Codes interessiert sein, der Unterstützung für diese Funktion als eine Option hinzufügt.

3

ASIHTTPRequest unterstützt jetzt das Caching - check out ASIDownloadCache ie.

[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]] 
0

versuchen Sie dies, es funktioniert für mich.

__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setDownloadCache:[ASIDownloadCache sharedCache]]; 
    [request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy]; 
    [request setCachePolicy:ASIAskServerIfModifiedWhenStaleCachePolicy]; 
    [request setSecondsToCache:60*60*24]; // Cache for 24 hrs 
    [request setDelegate:self]; // A delegate must be specified 
    [request setCompletionBlock:^{ 
Verwandte Themen