不推荐使用:iOS9中的'sendAsynchronousRequest:queue:completionHandler:'

Enr*_*iMR 10 xcode objective-c ios ios9

我有自己的类来进行http调用但现在在iOS9中这个方法已被弃用:

[NSURLConnetion sendAsynchronousRequest:queue:completionHandler:]

我正在尝试测试新的 [NSURLSession dataTaskWithRequest:completionHandler:]

但Xcode给出错误,因为它没有找到这种方法.

不推荐使用Xcode编译器警告:

 'sendAsynchronousRequest:queue:completionHandler:' is deprecated: first deprecated in iOS 9.0 - Use [NSURLSession dataTaskWithRequest:completionHandler:] (see NSURLSession.h
Run Code Online (Sandbox Code Playgroud)

新方法出错:

No known class method for selector 'dataTaskWithRequest:completionHandler:'
Run Code Online (Sandbox Code Playgroud)

方法:

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

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


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

    //[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:ourBlock];
    [NSURLSession dataTaskWithRequest:request completionHandler:ourBlock];
}
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Leo*_*ica 16

dataTaskWithRequest:completionHandler:是一个实例方法,而不是类方法.您必须配置新会话或使用共享会话:

[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:ourBlock];
Run Code Online (Sandbox Code Playgroud)

  • @EnriMR 取决于你的情况。由于到目前为止您使用了“NSURLConnection”,因此您可以使用共享会话。自 iOS 7 起,Apple 在内部将其用于“NSURLConnection”。 (2认同)

小智 9

[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data,NSURLResponse *response,NSError *error)
 {
 // Block Body 
 }];
Run Code Online (Sandbox Code Playgroud)

  • 你不是刚刚复制了 Leo Natan 的回答吗? (2认同)