2009-12-05 5 views
7

Estoy usando ASIHttpRequests y ASINetworkQueue en una aplicación de iphone para recuperar unos 100k archivos XML y muchas miniaturas de un servicio web. Me gustaría guardar las solicitudes en el estilo de NSURLCache. ASI no parece admitir el almacenamiento en caché tal como está, y miré el código y se colocó en C para crear las solicitudes, por lo que insertar la capa NSURLCache me pareció complicado.¿Cómo puedo agregar el caché de solicitudes HTTP a una aplicación usando ASIHTTPRequests?

¿Cuál es la mejor manera de implementar esto?

Respuesta

0

NSURLConnection tiene soporte para el almacenamiento en caché en el estilo de NSURLCache, y hace mucho trabajo para usted detrás de las escenas. Incluso tiene un método delegado agradable que le permitirá manipular el cachedResponse:

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

1

Usted puede proporcionar su propio almacenamiento en caché antes de caer abajo en código ASI.

envolver su código de ASI en una clase que tiene un método:

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

Ese método comprueba en primer lugar un NSDictionary interna para ver si tiene un presente clave para la URL especificada. Si lo hace, devuelve el objeto almacenado con la clave.

Si no es así, realiza la ASIRequest normal. Cuando la solicitud se recibe del servidor, la almacena como una cadena en su diccionario con la clave de la url.

Por supuesto, deberá manejar las solicitudes asíncronas y caducar las solicitudes anteriores con cuidado.

1

Cualquiera que pregunte cómo pueden hacer esto con ASIHTTPRequest directamente puede estar interesado en este branch del código que agrega compatibilidad con esta característica como una opción.

3

ASIHTTPRequest ahora es compatible con el almacenamiento en caché - echa un vistazo a ASIDownloadCache es decir.

[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]] 
0

prueba esto, funciona para mí.

__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:^{ 
Cuestiones relacionadas