NSURLConnection initWithRequest is deprecated

2019-01-22 22:29发布

问题:

I am adopting the Gmail API in iOS and I am getting the warning:

initWithRequest is deprecated

in the following line:

connection_ = [[connectionClass alloc] initWithRequest:request_ delegate:self startImmediately:NO];

The line is in the source file GTMHTTPFetcher.m of the API library.

What is the substitute for the deprecated -initWithRequest: method?

回答1:

It seems that the whole NSURLConnection API has been deprecated in iOS 9. Existing apps will continue to work, but new builds (linked against iOS SDK) must use the newer NSURLSession API.

Ray Wenderlich has a good tutorial here. Also, of course, check the official documentation.



回答2:

NSURLConnection is deprecated in iOS 9. You can use NSURLSession instead which exists since iOS 7.

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
        {
            // do something with the data 
        }];
[dataTask resume];


回答3:

If you don't care about the completionHandler : here's an one liner.

[[[NSURLSession sharedSession] dataTaskWithRequest:request] resume];


回答4:

Use STHTTPRequest which uses NSURLConnection/NSURLSession.

For NSURLSession use STHTTPRequest2.

STHTTPRequest is best library as it has only 2 files and easy to use.