gpt4 book ai didi

ios - NSURLConnection 在 iOS9 中被弃用

转载 作者:IT王子 更新时间:2023-10-29 08:08:34 25 4
gpt4 key购买 nike

我想下载一个带有 NSURLRequest 的文件并保存它,但要符合

NSData * data = ... 发生错误。

NSURL *Urlstring = [NSURL URLWithString:@"http://yourdomain.com/yourfile.pdf"];
NSURLRequest *request = [NSURLRequest requestWithURL: Urlstring];
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
documentsURL = [documentsURL URLByAppendingPathComponent:@"localFile.pdf"];

[data writeToURL:documentsURL atomically:YES];

警告消息是我应该使用 NSURLSession dataTaskwithrequest“因为 sendSynchronousRequest 在 iOS 9 中已被弃用,但这不起作用我希望有人能帮助我

最佳答案

现在你必须使用NSURLSession

示例(获取):

-(void)placeGetRequest:(NSString *)action withHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))ourBlock {

NSString *urlString = [NSString stringWithFormat:@"%@/%@", URL_API, action];


NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:ourBlock] resume];
}

现在您需要使用一个操作(或者您的完整 URL,如果您愿意)和 API 调用返回时将执行的 block 来调用该方法。

[self placeGetRequest:@"action" withHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// your code
}];

在该 block 内,您将收到带有响应数据的 NSData 和带有 HTTP 响应的 NSURLResponse。所以现在,您可以将代码放在那里:

NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
documentsURL = [documentsURL URLByAppendingPathComponent:@"localFile.pdf"];

[data writeToURL:documentsURL atomically:YES];

NSURLSession 和 NSURLConnection 的主要区别

  • NSURLConnection:如果我们与 NSURLConnection 有一个打开的连接并且系统中断了我们的应用程序,当我们的应用程序进入后台模式时,我们接收或发送的所有内容都会丢失。 Process diagram for NSURLConnection

  • NSURLSession:解决这个问题,也给我们进程外下载。即使我们没有访问权限,它也会管理连接过程。您需要在 AppDelegate 中使用 application:handleEventsForBackgroundURLSession:completionHandler Process diagram for NSURLSession

So with the use of NSURLSession, you don't need to manage or to check your internet connection because OS does it for you.

关于ios - NSURLConnection 在 iOS9 中被弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32441229/

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