【问题标题】:ios NSURLSession (default configuration) does not cache requestsios NSURLSession(默认配置)不缓存请求
【发布时间】:2015-02-28 23:53:05
【问题描述】:

我已经配置了会话:

- (void)createSession {
    NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
    sessionConfig.requestCachePolicy = NSURLRequestReturnCacheDataElseLoad;
    _session = [NSURLSession sessionWithConfiguration:sessionConfig];
}

然后,我尝试向服务器发出请求(从 Twitter 的 API 获取图像):

    NSURL *url = tweet.mediaUrl;
    NSURLSessionDownloadTask *getImageTask =
    [_session downloadTaskWithURL:url
                completionHandler:^(NSURL *location,
                                    NSURLResponse *response,
                                    NSError *error) {
                    UIImage *downloadedImage = [UIImage imageWithData: [NSData dataWithContentsOfURL:location] ];
                    dispatch_async(dispatch_get_main_queue(), ^{

                    //setting image to a view


                    });
                }];

    [getImageTask resume];

图像正在加载并正确设置,但是当我关闭机器上的 Internet 连接时(没有终止应用程序,它仍然运行......)我得到了空的 UIImageViews - 所以会话尝试从服务器下载图像,但不使用任何缓存。
是什么导致了这个问题?
我尝试使用共享会话,或者使用预定义的磁盘和内存空间配置共享缓存,但没有任何帮助。
iOS 模拟器,iOS 8+

【问题讨论】:

标签: ios nsurlsession nsurlcache nsurlsessiondownloadtask nsurlsessionconfiguration


【解决方案1】:

缓存不同于下载任务。 下载的数据存储在临时目录中,如果需要永久保存,则需要将其移动到应用路径。 在下一次请求时使用缓存数据的位置(基于响应或设置缓存策略)。 注意:操作系统在某些情况下可以删除缓存数据

【讨论】:

    猜你喜欢
    • 2016-02-15
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    相关资源
    最近更新 更多