2012-04-20 8 views
5

Estoy usando NSURLRequest con CachePolicy para descargar un plist en NSData. Cuando cambio el contenido de mi lista, mi aplicación está ignorando esto y todavía presenta el contenido que está en la memoria caché. ¿Cuánto tiempo persiste el caché? De ser así, ¿existe una opción para indicar cuánto tiempo persisten los datos de la memoria caché? ¿Hay alguna manera de verificar en NSURLRequest si los datos en el servidor son más nuevos que la caché carga los datos del servidor o si es igual a la caché usa la caché?NSURLPolítica de caché de solicitud

Respuesta

2

Eche un vistazo a Controlling Response Caching en el URLLoadingSystem docs.

Usted puede añadir su propia fecha en los métodos de delegado

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

Mucho más sencillo con el sistema de almacenamiento en caché es ASIHTTPRequest. Recomiendo usar este sistema de carga de URL.

A partir de los documentos de manzana:

El ejemplo de la Lista 6 impide el almacenamiento en caché de las respuestas https. Es también agrega la fecha actual al diccionario de información del usuario para las respuestas que están en caché.

-(NSCachedURLResponse *)connection:(NSURLConnection *)connection 
       willCacheResponse:(NSCachedURLResponse *)cachedResponse 
{ 
    NSCachedURLResponse *newCachedResponse = cachedResponse; 

    if ([[[[cachedResponse response] URL] scheme] isEqual:@"https"]) { 
     newCachedResponse = nil; 
    } else { 
     NSDictionary *newUserInfo; 
     newUserInfo = [NSDictionary dictionaryWithObject:[NSCalendarDate date] 
               forKey:@"Cached Date"]; 
     newCachedResponse = [[[NSCachedURLResponse alloc] 
           initWithResponse:[cachedResponse response] 
            data:[cachedResponse data] 
            userInfo:newUserInfo 
            storagePolicy:[cachedResponse storagePolicy]] 
          autorelease]; 
    } 
    return newCachedResponse; 
} 
+0

Thanks.I establece ahora a cero. Pero, ¿cómo hacer que la memoria caché se mantenga durante cierto tiempo o verificar si hay datos más nuevos disponibles del servidor? – halloway4b

+0

He actualizado mi respuesta –

+0

iOS 6.1 SDK documentación indica lo siguiente: conexión: willCacheResponse: enviado delante de la conexión almacena una respuesta en caché en la memoria caché, para dar el delegado una oportunidad para alterarlo. (obligatorio) (Disponible en iOS 2.0 a iOS 4.3) – cynistersix