如何在iOS中缓存带有图像的整个网页 [英] how to cache a whole web page with images in iOS

查看:116
本文介绍了如何在iOS中缓存带有图像的整个网页的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发iOS上的图片文字混合页面。我知道我可以使用UIWebView来实现目标。但问题是,用户可能需要离线阅读页面。
对于文本部分,我可以将html保存到磁盘并将其加载到脱机模式。
但图片怎么样?是否可以将图像缓存到磁盘上,UIWebView仍然可以显示它们?

I am working on a image-text mixture page on iOS. I know it is possible for me to use UIWebView to achieve the goal. But the problem is, user may need to read the page offline. For the text part, I can save the html to the disk and load it in the offline mode. But how about images? Is it possible to cache the images to the disk and the UIWebView can still be able to display them?

谢谢!

推荐答案

ASIHTTPRequest项目有一个名为的类ASIWebPageRequest 旨在完全按照您的意愿行事。如果您可以为项目添加额外的依赖项,那么我认为这对您来说是一个很好的解决方案: ASIWebPageRequest

The ASIHTTPRequest project has a class called ASIWebPageRequest which is designed to do exactly what you want. If you're okay with adding an additional dependency to your project then I think it's a good solution for you: ASIWebPageRequest.

在我上面喜欢的页面上有一些如何使用它的好例子,但为了完整性,我会在这里包含其中一个:

On the page I liked above there are some good examples of how to use it but I'll include one of them here for completeness:

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

这篇关于如何在iOS中缓存带有图像的整个网页的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆