1. 使用NSURLConnection的网络请求,最好定义一个类方法,在主线程中直接调用类方法获取请求到的网络数据


  2. //构建类方法--请求网络

  3. + (void)requestData:(NSString *)urlStr

  4.          httpMethod:(NSString *)method

  5.              params:(NSMutableDictionary *)params

  6.     comletionHandle:(void (^)(id result))block

  7. {

  8.     //1.构建URL

  9.     urlStr = [BASE_URL stringByAppendingString:urlStr];

  10.     NSURL *url = [NSURL URLWithString:urlStr];

  11.     //2.request构建

  12.     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

  13.     request.timeoutInterval = 60;

  14.     request.HTTPMethod = method;

  15.     //判断请求方式

  16.     if ([method isEqualToString:@"GET"]) {

  17.         //URL后直接拼接

  18.         NSMutableString *paramsStr = [[NSMutableString alloc]initWithString:@"?"];

  19.         //拼接样式

  20.         //拼接URL---https://api.weibo.com/2/statuses/home_timeline.json?access_token=2.00SllYeF568jxC1082c39bc40_Vqyg&username=aaa&pass=bbb


  21.         //循环拼接参数字典

  22.         for (int i = 0; i < params.count; i ++) {

  23.             NSString *key = params.allKeys[i];

  24.             NSString *value = params[key];

  25.             

  26.             //开始拼接=

  27.             [paramsStr appendFormat:@"%@=%@",key,value];

  28.             //拼接&符号

  29.             //最后一个不再用&符号拼接

  30.             if (i < params.count-1) {

  31.                 [paramsStr appendFormat:@"&"];

  32.             }

  33.             

  34.         }

  35.         //得到拼接后的URL(将主URL与拼接的URL 拼接在一起得到完整的URL)

  36.         request.URL = [NSURL URLWithString:[urlStr stringByAppendingString:paramsStr]];

  37.         

  38.     }else if ([method isEqualToString:@"POST"]){

  39.         //将参数添加到请求体中


  40.         NSMutableString *paramsStr = [[NSMutableString alloc]initWithString:@""];

  41.         for (int i = 0; i < params.count; i ++) {

  42.             NSString *key = params.allKeys[i];

  43.             NSString *value = params[key];

  44.             

  45.             //开始拼接

  46.             [paramsStr appendFormat:@"%@=%@",key,value];

  47.             if (i < params.count - 1) {

  48.                 [paramsStr appendFormat:@"&"];

  49.             }

  50.         }

  51.         //添加到请求体中

  52.         //将字符串转化为数据

  53.         NSData *data = [paramsStr dataUsingEncoding:NSUTF8StringEncoding];

  54.         request.HTTPBody = data;

  55.     }

  56.     

  57.     //3.开始请求网络

  58.     NSOperationQueue *queue = [[NSOperationQueue alloc]init];

  59.      [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

  60.          if (connectionError) {

  61.              NSLog(@"error----%@",connectionError);

  62.              return ;

  63.          }

  64.          //成功获取数据

  65.          //开始解析数据

  66.          id result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

  67.          //返回数据

  68.          dispatch_async(dispatch_get_main_queue(), ^{

  69.              block(result);

  70.          });

  71.          

  72.      }];

  73. }