首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIWebView NSURLCache脱机加载数据

UIWebView NSURLCache脱机加载数据
EN

Stack Overflow用户
提问于 2016-12-21 02:10:25
回答 1查看 488关注 0票数 0

我看过好几篇关于这个问题的帖子,我想不出如何才能做到这一点。例如,这篇文章是NSCachedURLResponse返回对象,但UIWebView不解释内容。

建议我们在返回缓存的响应之前,对cachedResponseForRequest进行子类化和重写,并修改NSURLRequest (不确定为什么需要这样做)。

这是我的NSURLCache子类中的代码:

代码语言:javascript
复制
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request {

    NSCachedURLResponse *resp = [super cachedResponseForRequest:request];
    if (resp != nil && resp.data.length > 0) {
        NSDictionary *headers = @{@"Access-Control-Allow-Origin" : @"*", @"Access-Control-Allow-Headers" : @"Content-Type"};
        NSHTTPURLResponse *urlresponse = [[NSHTTPURLResponse alloc] initWithURL:request.URL statusCode:200 HTTPVersion:@"1.1" headerFields:headers];
        NSCachedURLResponse *cachedResponse = [[NSCachedURLResponse alloc] initWithResponse:urlresponse data:resp.data];
        return cachedResponse;
    } else {
        return nil;
    }

}

现在,当我通过webview加载请求并且离线时,委托didFailLoadWithError会被调用(它无法加载),但是在调用该委托方法之前,我的cachedResponseForRequest方法被调用,缓存的响应有一些html,但是我的didFailLoadWithError方法仍然被调用。因此,我的问题是,如果我们从webViewDidFinishLoad返回缓存的响应,那么是否应该调用NSURLCache,如果不是,我该如何使它工作?

我的didFinishLaunchingWithOptions里有这个

代码语言:javascript
复制
NSUInteger cacheSizeMemory = 500*1024*1024; // 500 MB
NSUInteger cacheSizeDisk = 500*1024*1024; // 500 MB
NSURLCache *sharedCache = [[CustomCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"];
[NSURLCache setSharedURLCache:sharedCache];

这就是我想要工作的流程:

  1. 启动应用程序。
  2. 点击一些url (比如slickdeals.net)
  3. 离线关闭应用程序
  4. 启动应用程序
  5. UIWebView尝试点击url,但是设备离线,返回一个返回的缓存响应。
  6. 我们显示缓存的响应。

任何在我的代码中需要修改的想法都是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2016-12-21 06:42:39

NSURLCache是为HTTP一致性缓存而设计的,并且常常表现出意想不到的行为。您必须为用例编写自己的缓存,并实现一个自定义NSURLProtocol来使用它。该协议将响应放入缓存中,并在脱机时从缓存中提供响应。罗伯·纳皮尔( Rob )在这方面惹恼了优秀文章

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41254059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档