Как очистить кэш UIWebView?

Если вы не укажете ограничение высоты для параметра UILabel, оно примет высоту, которая соответствует всему тексту. Просто убедитесь, что количество строк установлено в 0 и что на вашей метке установлены все ограничения по границам.

25
задан Mike Rychev 26 March 2010 в 13:13
поделиться

4 ответа

Использование

[[NSURLCache sharedURLCache] removeAllCachedResponses];

ДО выполнения вызова или при загрузке контроллера представления, это статическая функция, которая удаляет все данные кэша для ответов. Только с использованием cachePolicy этого было недостаточно, я вижу, что uiwebview может обновлять HTML-документ, но не связанный документ, такой как CSS, JS или изображения.

Я пробую это решение, и оно работает.

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

}

lastReq=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:localUrl]
                                   cachePolicy:NSURLRequestReloadIgnoringCacheData
                               timeoutInterval:10000];
[lastReq setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];

[self.mainWebView loadRequest:lastReq];

- Прежде всего, я удаляю кеш для последнего запроса и призываю удалить весь другой кеш (я думаю, что это не так важно) - Затем я создаю nsurlrequest и ignoringLocalCacheData - наконец, загрузите новый запрос

Я проверяю его, и он перезагружает все файлы (HTML, CSS, JS и изображения).

11
ответ дан jgorozco 28 November 2019 в 17:54
поделиться

Я работаю с некоторыми дизайнерами, редактирующими файлы CSS, используемые некоторыми веб-представлениями в приложении. Они жаловались, что изменения в таблицах стилей не были отражены в приложении, и небольшая отладка с Чарльзом подтвердила, что они не были перезагружены. Я пытался, казалось бы, каждый ответ на StackOverflow, но безрезультатно.

То, что в конце концов уловило, было создание подкласса NSURLCache, который переопределяет -cachedResponseForRequest:

- (NSCachedURLResponse*)cachedResponseForRequest:(NSURLRequest*)request
{
    if ([[[[request URL] absoluteString] pathExtension] caseInsensitiveCompare:@"css"] == NSOrderedSame)
        return nil;
    else
        return [super cachedResponseForRequest:request];
}

Я затем устанавливаю его с разумной памятью и емкостью диска:

NSURLCache *currentCache = [NSURLCache sharedURLCache];
NSString *cachePath = [cachesDirectory() stringByAppendingPathComponent:@"DebugCache"];

DebugURLCache *cache = [[DebugURLCache alloc] initWithMemoryCapacity:currentCache.memoryCapacity diskCapacity:currentCache.diskCapacity diskPath:cachePath];
[NSURLCache setSharedURLCache:cache];
[cache release];

(cachesDirectory() - это функция, которая возвращает /Library/Caches в каталоге приложения на iOS).

Как вы можете сказать по названию, я использую это только в конфигурации отладки (используя настройку сборки дополнительных флагов препроцессора и некоторые #ifdefs).

4
ответ дан Dan Abramov 28 November 2019 в 17:54
поделиться

Используйте следующий код:

NSString *cacheDir=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];  
  [[NSFileManager defaultManager]removeItemAtPath:cacheDir error:nil];
0
ответ дан Akshay Aher 28 November 2019 в 17:54
поделиться
NSURLRequest* request = [NSURLRequest requestWithURL:fileURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.0];

[webView loadRequest:request];

(теперь с исправленной опечаткой)

17
ответ дан 28 November 2019 в 17:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: