我知道这个问题需要很多时间,但所有这些都没有解决我的问题。我想缓存从URl进入的Webservice Data。如果缓存数据可用,则从缓存加载数据,并在后台线程中加载数据,它还检查数据是否已更改,然后缓存更新和数据加载新数据。 我尝试了以下代码但没有任何效果。
-(void)getcountrylist
{
[self setSharedCacheForImages];
NSString *urlString = @"https://restcountries.eu/rest/v1/all";
NSURLSession *session = [self prepareSessionForRequest];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"GET"];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (!error) {
NSArray *jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Result new = %@",jsonResponse);
});
}
}];
[dataTask resume];
}
- (NSURLSession *)prepareSessionForRequest
{
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
[sessionConfiguration setHTTPAdditionalHeaders:@{@"Content-Type": @"application/json", @"Accept": @"application/json"}];
NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration];
return session;
}
- (void)setSharedCacheForImages
{
NSUInteger cashSize = 250 * 1024 * 1024;
NSUInteger cashDiskSize = 250 * 1024 * 1024;
NSURLCache *imageCache = [[NSURLCache alloc] initWithMemoryCapacity:cashSize diskCapacity:cashDiskSize diskPath:@"https://restcountries.eu/rest/v1/all"];
[NSURLCache setSharedURLCache:imageCache];
}
答案 0 :(得分:1)
您可以使用NSMutableURLRequest
class setCachePolicy
方法处理缓存数据。有很多方法可以相应地看看。
NSURLRequestReloadIgnoringCacheData:此方法忽略缓存数据并从服务器获取新的更新响应。
指定应从原始源加载URL加载的数据。不应使用现有的缓存数据来满足URL加载请求。
NSURLRequestUseProtocolCachePolicy:指定协议实现中定义的缓存逻辑(如果有)用于特定的URL加载请求。这是URL加载请求的默认策略。
<强> NSURLRequestReloadIgnoringLocalAndRemoteCacheData:强>指定不仅应该在本地高速缓存的数据被忽略,但代理和其他中间体应指示忽视它们的高速缓存,只要该协议允许
请点击此处查看: source。
用途:
NSURLRequest *Request = [NSURLRequest requestWithURL:[NSURL URLWithString:URLForService_Providers] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0];
OR
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
[request setCachePolicy:NSURLRequestReloadIgnoringCacheData];