2011-06-30 22 views
8

He encontrado algunas publicaciones similares, pero no parecen tener ningún efecto con lo que estoy haciendo. Tengo un UIWebView que estoy usando para mostrar contenido local en mi paquete. Específicamente estoy mostrando un archivo docx. El usuario rara vez debe mirar este documento, y mi aplicación tiene poca memoria, por lo que lo que quiero hacer es evitar que el UIWebView guarde en caché el documento. Otra opción viable es borrar el caché cuando el usuario abandona la vista. Estoy totalmente de acuerdo con tener que cargarlo desde cero cada vez que el usuario ingresa a la vista.limpiando un caché de vistas web para archivos locales

que carga el documento, así:

NSString * path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"Intro text"] ofType:@"docx"]; 
NSURL * url = [NSURL fileURLWithPath:path]; 
request = [NSURLRequest requestWithURL:url]; 

doc_view_rect = CGRectMake(5,105,self.view.frame.size.width,self.view.frame.size.height); 
doc_viewer = [[UIWebView alloc] initWithFrame:doc_view_rect]; 
[doc_viewer loadRequest:request]; 

En mis intentos de detener el almacenamiento en caché que he intentado:

[[NSURLCache sharedURLCache] setMemoryCapacity:0]; 
[[NSURLCache sharedURLCache] setDiskCapacity:0]; 

Y:

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; 
[NSURLCache setSharedURLCache:sharedCache]; 
[sharedCache release]; 
sharedCache = nil; 

Y:

if(request) { 
    [[NSURLCache sharedURLCache] removeCachedResponseForRequest:request]; 
} 
[[NSURLCache sharedURLCache] removeAllCachedResponses]; 

También intenté configurar la política de almacenamiento en caché de vistas web, pero eso parecía consumir memoria, ya que cuando publiqué la vista web, aún quedaba memoria. Cuando volví a ingresar y realicé mi ubicación, no usé la misma memoria.

No creo que esta sea la dirección correcta. Todos fueron etiquetados como formas de detener el almacenamiento en caché de páginas web, pero parecen no tener ningún efecto con los archivos locales. No estoy seguro de a dónde más ir con este. Si alguien sabe cómo forzar el caché para borrar, o evitar el almacenamiento en caché en primer lugar, agradecería mucho la ayuda.

Respuesta

0

WebKit mantiene sus propios cachés además del estándar NSURLCache uno. Usted no tiene control sobre eso.

Realísticamente, debe asegurarse de que su código se comporta bien con advertencias de memoria baja, y confíe en que UIWebView hará lo mismo.

0

No estoy seguro de si su problema fue cargar datos almacenados en caché, o simplemente que la última URL solicitada se almacenó en caché y, por lo tanto, no desencadenó la carga de un nuevo documento. Ese parece ser el caso para mí, así que utiliza este truco muy sucio:

_urlRequestCacheBust = [NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; 

Y para cada nueva solicitud Web:

- (void)webViewLoadURL:(NSURL *)url 
{ 
    [[_webView mainFrame] loadRequest:_urlRequestCacheBust]; 

    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; 
    [[_webView mainFrame] loadRequest:urlRequest]; 
} 

* escalofrío *

Cuestiones relacionadas