NSURLSession来发送同步请求

NSURLConnection 发送同步请求的方法在iOS9.0已经被废弃

+ (nullable NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse * __nullable * __nullable)response error:(NSError **)error NS_DEPRECATED(10_3, 10_11, 2_0, 9_0, "Use [NSURLSession dataTaskWithRequest:completionHandler:] (see NSURLSession.h") __WATCHOS_PROHIBITED;

用来替代的NSURLSession 只有带block的方法可以调用,没有成为同步方法,我们稍微改一下,让它支持同步的请求

- (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error

{

          NSError __block *err = NULL;

          NSData __block *data;

          BOOL __block reqProcessed = false;

          NSURLResponse __block *resp;

          [[[NSURLSession sharedSession] dataTaskWithRequest:request                completionHandler:^(NSData * _Nullable _data, NSURLResponse * _Nullable _response, NSError * _Nullable _error) {

                  resp = _response;

                   err = _error;

                    data = _data;

           reqProcessed = true;

}] resume];

while (!reqProcessed) {

          [NSThread sleepForTimeInterval:0];

}

         *response = resp;

         *error = err;

           return data;

}

请求的时候调用

/NSData *data = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&resp error:&err];

NSData *data = [self sendSynchronousRequest:theRequest returningResponse:&resp error:&err];

你可能感兴趣的:(NSURLSession来发送同步请求)