gpt4 book ai didi

ios - iOS8 上的简单 NSURLCache 实现

转载 作者:行者123 更新时间:2023-11-28 21:53:09 26 4
gpt4 key购买 nike

我在获取在 iOS8 上运行的 NSURLCache 的简单实现时遇到了问题。据我了解,一旦创建了共享缓存,它就会使用适当的缓存策略自动缓存数据请求。除非您想自定义行为,否则无需配置。这是正确的吗?

我在下面包含了我的代码的简化版本。缓存在AppDelegate中创建,需要数据的TableViewController使用API​​Caller对象进行调用。该请求使用 NSURLRequestReturnCacheDataElseLoad,因为此信息不需要经常更新。

如果我在这里离题太远。下一步是什么?接收到的数据为95KB。

应用委托(delegate):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.

NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024 diskCapacity:20 * 1024 * 1024 diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];


return YES;
}

表格 View Controller :

- (void)viewDidLoad {

APICaller *apiCaller = [APICaller alloc] init];
[apiCaller makeAPICallWithCompletionHandler:^(NSArray *result, NSError *error){
if (error) {

// Handle error
} else {
self.property = [result mutableCopy];
[self.tableView reloadData];

}

}

}

API调用者:

- (void)makeAPICallWithCompletionHandler:(void(^)(NSArray *result, NSError *error))completionHandler
{
NSString *urlString = [NSString stringWithFormat@"https://api.apiwebsite.com/json/query?key=@", API_KEY];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10];
NSURLSessionConfiguration *config = [NSURLSession defaultSessionConfiguration];
self.urlSession = [URLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];

NSURLSessionDataTask *dataTask = [self.URLSession dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"There was an error");
dispatch_async(dispatch_get_main_queue(), ^{
completionHandler(nil, error);
});
} else {

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
NSSortDescriptor *sortByName = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortByName];
NSArray *sortedResult = [dict[@"result"] sortedArrayUsingDescriptors:sortDescriptors];

dispatch_async(dispatch_get_main_queue(), ^{
completionHandler(sortedResponse, error);
});
}

}];

[dataTask resume];
}

最佳答案

根据 this postthis post使用 NSURLSession 时,NSURLCache 在 iOS 8 中被破坏。

根据我链接的第一篇文章,NSURLConnection 似乎仍然有效。我记得在其中一条评论中看到,截至 2 月初,情况仍然如此,但我还没有机会调查自己。

祝你好运。

关于ios - iOS8 上的简单 NSURLCache 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27537656/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com