как кешировать целую веб-страницу с изображениями в iOS - PullRequest
15 голосов
/ 14 июля 2011

Я работаю над страницей с изображением и текстом на iOS. Я знаю, что я могу использовать UIWebView для достижения цели. Но проблема в том, что пользователю может потребоваться прочитать страницу в автономном режиме. Для текстовой части я могу сохранить HTML-файл на диск и загрузить его в автономном режиме. Но как насчет изображений? Можно ли кэшировать изображения на диск, и UIWebView все еще может отображать их?

Спасибо!

1 Ответ

15 голосов
/ 14 июля 2011

В проекте ASIHTTPRequest имеется класс с именем ASIWebPageRequest, предназначенный для выполнения именно того, что вы хотите. Если вы согласны добавить дополнительную зависимость в ваш проект, то я думаю, что это хорошее решение для вас: ASIWebPageRequest .

На странице, которая мне понравилась выше, есть несколько хороших примеров того, как ее использовать, но я приведу один из них здесь для полноты:

- (IBAction)loadURL:(NSURL *)url
{
   // Assume request is a property of our controller
   // First, we'll cancel any in-progress page load
   [[self request] setDelegate:nil];
   [[self request] cancel];

   [self setRequest:[ASIWebPageRequest requestWithURL:url]];
   [[self request] setDelegate:self];
   [[self request] setDidFailSelector:@selector(webPageFetchFailed:)];
   [[self request] setDidFinishSelector:@selector(webPageFetchSucceeded:)];

   // Tell the request to embed external resources directly in the page
   [[self request] setUrlReplacementMode:ASIReplaceExternalResourcesWithData];

   // It is strongly recommended you use a download cache with ASIWebPageRequest
   // When using a cache, external resources are automatically stored in the cache
   // and can be pulled from the cache on subsequent page loads
   [[self request] setDownloadCache:[ASIDownloadCache sharedCache]];

   // Ask the download cache for a place to store the cached data
   // This is the most efficient way for an ASIWebPageRequest to store a web page
   [[self request] setDownloadDestinationPath:
      [[ASIDownloadCache sharedCache] pathToStoreCachedResponseDataForRequest:[self request]]];

   [[self request] startAsynchronous];
}

- (void)webPageFetchFailed:(ASIHTTPRequest *)theRequest
{
   // Obviously you should handle the error properly...
   NSLog(@"%@",[theRequest error]);
}

- (void)webPageFetchSucceeded:(ASIHTTPRequest *)theRequest
{
   NSString *response = [NSString stringWithContentsOfFile:
      [theRequest downloadDestinationPath] encoding:[theRequest responseEncoding] error:nil];
   // Note we're setting the baseURL to the url of the page we downloaded. This is important!
   [webView loadHTMLString:response baseURL:[request url]];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...