首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 8 NSURLCache发行

iOS 8 NSURLCache发行
EN

Stack Overflow用户
提问于 2015-05-04 14:54:35
回答 1查看 245关注 0票数 0

我正在创建一个应用程序,在那里我希望不时使用缓存的响应。我遇到了一个与NSURLCache有关的奇怪问题,更糟糕的是,如果我根据请求设置NSURLRequestReturnCacheDataDontLoad,就不会在iOS 8上得到缓存的响应。下面是我与AFNetworking一起使用的代码:

代码语言:javascript
复制
// Define web request.
void (^simpleBlock)(void) = ^{
    GTSessionManager.manager.requestSerializer.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;

    [GTSessionManager.manager POST:string parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
        NSDictionary *responseJson = responseObject;

        [self parseJsonSuccess:responseJson];
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        if (error.userInfo[JSONResponseSerializerWithDataKey]) {
            NSData *data = error.userInfo[JSONResponseSerializerWithDataKey];

            NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data
                                                                     options:kNilOptions
                                                                       error:&error];

            [self parseJsonError:json];
        }
        else
            [self parseJsonError:nil];
    }];
};

if (self.shouldUseCache) {
    GTSessionManager.manager.requestSerializer.cachePolicy = NSURLRequestReturnCacheDataDontLoad;

    [GTSessionManager.manager POST:string parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
        NSDictionary *responseJson = responseObject;

        [self parseJsonCacheSuccess:responseJson];

        // Load second request.
        simpleBlock();
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        simpleBlock();
    }];
}
else
    simpleBlock();

这里的主要思想是,如果客户机想要使用缓存,第一个请求应该尝试加载它,将结果传递给处理程序,并开始重新加载请求以刷新缓存。

这种方法在iOS 7上工作得很好,但在iOS 8+上却不起作用。我已经用下面的调用设置了NSURLCache。

代码语言:javascript
复制
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:500 * 1024 * 1024
                                                            diskCapacity:500 * 1024 * 1024
                                                                diskPath:@"cache" /**Tried nil here as well. */];
[NSURLCache setSharedURLCache:sharedCache];

我读了几篇文章和其他一些关于这方面的问题,但我就是不能让它起作用。我是不是遗漏了什么?这可能与我使用的职位申请有关吗?

编辑忘记提到我没有在服务器上使用缓存策略。我还尝试使用Cache-Control=max-age=604800, public设置缓存策略,但行为相同。

EN

回答 1

Stack Overflow用户

发布于 2015-05-06 09:55:00

好的,经过进一步的调查,我得出结论,问题就在NSURLSession的某个地方。我发送了与上面完全相同的请求,但是使用了AFHTTPRequestOperation而不是AFHTTPSessionManager,并且缓存在iOS 8+上加载得很好。

不过,我不太确定问题在哪里,我认为这与缓存策略有关,但目前我还是坚持使用NSURLConnection

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

https://stackoverflow.com/questions/30033262

复制
相关文章

相似问题

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