【问题标题】:Is there a way to retrieve an image from the NSURLCache?有没有办法从 NSURLCache 中检索图像?
【发布时间】:2015-05-22 15:35:52
【问题描述】:

当 UIWebView 以正常方式加载请求时,它很可能会缓存它,包括它的图像。我希望人们选择要存储在他们的相机胶卷中的图像。

此时我可以检测到用户在 UIWebView 中点击的图像的 URL。我无知的答案是使用 NSURLConnection 下载图像,但感觉不对,因为图像已经下载并且可能已经存储在缓存中。那么有没有办法检查图像是否已经被缓存并从他们那里获取而不是下载图像两次?

我试图像这样得到一个 NSCachedURLResponse:

   NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://upload.wikimedia.org/wikipedia/commons/thumb/6/64/Collage_of_Six_Cats-02.jpg/250px-Collage_of_Six_Cats-02.jpg"]];
    NSCachedURLResponse *response = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];

但是“响应”总是为零,这是否意味着它没有被缓存?


编辑:

在使用请求时:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

它确实返回了一个有效的响应。但是,如果我在自己创建的请求中使用相同的 URL,它会再次返回 nil,我很困惑。

【问题讨论】:

  • 我不知道是什么导致了您的问题,但请考虑使用名为 SDUrlCache (github.com/rs/SDURLCache) 的库。也许您的错误与 iOS 仅使用内存缓存的事实有关...

标签: image caching resources uiwebview nsurlcache


【解决方案1】:

NSURLCache 行为取决于请求的缓存策略、缓存配置 并缓存来自服务器的响应。
您可以执行以下操作以使缓存正常工作。

1) 在像这样使用它之前,你必须确保你正在初始化 NSURLCache。

[NSURLCache sharedURLCache];

2) 您可以手动设置从 webview 加载的请求的缓存策略 request.cachePolicy = NSURLCacheStorageAllowed;

【讨论】:

    猜你喜欢
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    相关资源
    最近更新 更多