очистка кэша веб-просмотров для локальных файлов - PullRequest
8 голосов
/ 01 июля 2011

Я нашел несколько похожих постов, но, похоже, они никак не влияют на то, что я делаю. У меня есть UIWebView, который я использую для отображения локального контента в моем комплекте. В частности, я показываю файл DOCX. Пользователь редко когда-либо просматривает этот документ, и мое приложение не хватает памяти, поэтому я хочу предотвратить кэширование документа UIWebView. Другой жизнеспособный вариант - очистить кеш, когда пользователь покидает вид. Я полностью согласен с необходимостью загружать его с нуля каждый раз, когда пользователь входит в представление.

Я загружаю документ так:

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];

В моих попытках остановить кеширование я пробовал:

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

И

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

А:

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

Я также пытался установить политику кэширования веб-просмотров, но это, казалось, просто съело память, поскольку, когда я выпустил веб-просмотр, там все еще оставалась память. Когда я снова вошел и снова открыл, он не использовал ту же память.

Хотя я не думаю, что это верное направление. Все они были помечены как способы предотвращения кэширования веб-страниц, но, похоже, они не влияют на локальные файлы. Я действительно не уверен, куда еще пойти с этим. Если кто-нибудь знает, как принудительно очистить кеш или предотвратить кеширование, я был бы очень признателен за помощь.

Ответы [ 2 ]

0 голосов
/ 10 июля 2014

Я не уверен, что ваша проблема заключалась в загрузке кэшированных данных или просто в том, что последний запрошенный URL был кэширован, и, следовательно, не инициировал загрузку нового документа. Мне показалось, что это так, поэтому я использовал этот очень грязный трюк:

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

И для каждого нового веб-запроса:

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

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

* Дрожь *

0 голосов
/ 26 апреля 2013

WebKit поддерживает свои собственные кэши в дополнение к стандартному NSURLCache.Вы не можете его контролировать.

Реально, вы должны убедиться, что ваш код работает хорошо при предупреждениях о нехватке памяти, и верить, что UIWebView сделает то же самое.

...