首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >iOS9中不推荐使用NSURLConnection

iOS9中不推荐使用NSURLConnection
EN

Stack Overflow用户
提问于 2015-09-07 22:41:41
回答 1查看 29.5K关注 0票数 19

我想下载一个包含NSURLRequest的文件并将其保存,但在行中使用

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

代码语言:javascript
复制
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中已被弃用,但这不起作用,我希望有人能帮助我

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-07 22:46:07

现在您必须使用NSURLSession

示例(GET):

代码语言:javascript
复制
-(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调用返回时将执行的块来调用该方法。

代码语言:javascript
复制
[self placeGetRequest:@"action" withHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    // your code
}];

在该块中,您将收到一个包含响应数据的NSData和一个包含HTTP响应的NSURLResponse。所以现在,你可以把你的代码放在那里:

代码语言:javascript
复制
NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
documentsURL = [documentsURL URLByAppendingPathComponent:@"localFile.pdf"];

[data writeToURL:documentsURL atomically:YES];

NSURLSession与NSURLConnection的主要区别

  • NSURLConnection:如果我们与NSURLConnection有一个开放的连接,而系统中断了我们的应用程序,当我们的应用程序进入后台模式时,我们收到或发送的所有东西都会丢失。

  • NSURLSession:解决了这个问题,也为我们提供了进程外下载。即使我们没有访问权限,它也会管理连接过程。您需要在AppDelegate

中使用application:handleEventsForBackgroundURLSession:completionHandler

因此,通过使用NSURLSession,您无需管理或检查您的互联网连接,因为操作系统会为您做这件事。

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

https://stackoverflow.com/questions/32441229

复制
相关文章

相似问题

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