ios objective-c caching ios8 nsurlcache

NSURLCache no borra las respuestas almacenadas en iOS8



objective-c caching (2)

Aquí está la función de ejemplo a la que llamo cuando necesito borrar el caché y hacer una nueva llamada a la URL

- (void)clearDataFromNSURLCache:(NSString *)urlString { NSURL *requestUrl = [NSURL URLWithString:urlString]; NSURLRequest *dataUrlRequest = [NSURLRequest requestWithURL: requestUrl]; NSURLCache * cache =[NSURLCache sharedURLCache]; NSCachedURLResponse* cacheResponse =[cache cachedResponseForRequest:dataUrlRequest]; if (cacheResponse) { NSString* dataStr = [NSString stringWithUTF8String:[[cacheResponse data] bytes]]; NSLog(@"data str r= %@",dataStr); NSLog(@"url str r= %@",[[[cacheResponse response] URL] absoluteString]); [cache storeCachedResponse:nil forRequest:dataUrlRequest]; [NSURLCache setSharedURLCache:cache]; } [[NSURLCache sharedURLCache] removeCachedResponseForRequest:dataUrlRequest]; //Check if the respnase data has been removed/deleted from cache NSURLRequest *finalRequestUrlRequest = [NSURLRequest requestWithURL:requestUrl]; NSURLCache * finalCache =[NSURLCache sharedURLCache]; NSCachedURLResponse* finalcacheResponse =[finalCache cachedResponseForRequest:finalRequestUrlRequest]; if (finalcacheResponse) { //Should not enter here NSString* finaldataStr = [NSString stringWithUTF8String:[[finalcacheResponse data] bytes]]; NSLog(@"data str r= %@",finaldataStr); NSLog(@"url str r= %@",[[[cacheResponse response] URL] absoluteString]); } }

En iOS 6/7, la respuesta se elimina con éxito para requestURL, pero en iOS 8 nunca se elimina. He buscado pero no pude encontrar una razón por la que esto no debería funcionar en iOS8.

Cualquier ayuda será apreciada… ..


Obtuve un resultado suficiente al restablecer la respuesta en caché para una URL específica, cambiando el control de caché a algo que nunca se devolvería como un "max-age = 0" en el encabezado. Mira aquí


NSURLCache está roto en iOS 8.0.x - nunca purga el caché, por lo que crece sin límite. Ver http://blog.airsource.co.uk/2014/10/11/nsurlcache-ios8-broken/ para una investigación detallada. La purga de caché se corrige en las betas 8.1, pero removeCachedResponseForRequest: no lo es.

removeCachedResponsesSinceDate: parece que funciona en iOS 8.0, una API que se agregó para 8.0, pero que aún no ha llegado a los documentos (se encuentra en la diferencia de API). No tengo claro cuál es el uso para nadie; seguramente lo que normalmente desea hacer es eliminar las respuestas en caché antes de una fecha en particular.

removeAllCachedResponses funciona, pero esa es una verdadera solución.