Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在iOS中使用图像缓存整个网页_Iphone_Ios_Ipad_Caching_Uiwebview - Fatal编程技术网

Iphone 如何在iOS中使用图像缓存整个网页

Iphone 如何在iOS中使用图像缓存整个网页,iphone,ios,ipad,caching,uiwebview,Iphone,Ios,Ipad,Caching,Uiwebview,我正在iOS上做一个图文混合页面。我知道我可以使用UIWebView来实现这个目标。但问题是,用户可能需要离线阅读页面。 对于文本部分,我可以将html保存到磁盘并以脱机模式加载。 但是图像呢?是否可以将图像缓存到磁盘,并且UIWebView仍然可以显示它们 谢谢大家! 有一个名为ASIWebPageRequest的类,该类的设计目的正是为了满足您的需要。如果您同意在项目中添加额外的依赖项,那么我认为这是一个很好的解决方案: 在我喜欢的上面的页面上,有一些关于如何使用它的好例子,但为了完整起见,

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

谢谢大家!

有一个名为
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]];
}

非常感谢您提供此示例,稍后将尝试。您能告诉我ASIReplaceExternalResourcesWithData如何将数据嵌入页面吗?页面在缓存中仍然是一个html文件,对吗?请求是否修改了原始html?是的,你是对的。ASI修改页面并将这些资产替换为。或者,您可以使用名为
ASIReplaceExternalResourcesWithLocalURLs
的不同URL替换模式,该模式将下载资源作为文件,但仍会修改HTML以指向这些本地文件。谢谢xoebus。我还发现,要启用脱机浏览,我需要添加以下代码行:
request.cachePolicy=ASIAskServerIfModifiedCachePolicy | ASIFallbackToCacheIfLoadFailsCachePolicy