异步请求示例

时间:2013-05-17 11:29:24

标签: objective-c nsurlconnection

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http:///];
NSURLRequest *req = [[NSURLRequest alloc]initWithURL:url];
NSURLConnection *con = [[NSURLConnection alloc]initWithRequest:req delegate:self startImmediately:YES];

在我的项目中,我在sendSynchronousRequest上使用了NSURLConnection。它有时让我崩溃。

所以我将此代码转换为AsynchronousRequest。我找不到合适的代码。

有人给我链接或发布适合我代码的代码。任何肝脏将不胜感激。

2 个答案:

答案 0 :(得分:20)

你可以做几件事。

  1. 您可以使用sendAsynchronousRequest并处理回调块。
  2. 您可以使用AFNetworking库,它以异步方式处理您的所有请求。非常易于使用和设置。
  3. 选项1的代码:

    NSURL *url = [NSURL URLWithString:urlString];
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
      if (error) {
        //NSLog(@"Error,%@", [error localizedDescription]);
      }
      else {
        //NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]);
      }
    }];
    

    选项2的代码:

    您可能想下载图书馆&首先将它包含在您的项目中。然后执行以下操作。您可以按照设置here

    的帖子进行操作
    NSURL *url = [NSURL URLWithString:@"http://httpbin.org/ip"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        NSLog(@"IP Address: %@", [JSON valueForKeyPath:@"origin"]);
    } failure:nil];
    
    [operation start];
    

答案 1 :(得分:2)

作为NSURLConnection现已弃用的sendAsynchronousRequest:queue:completionHandler:方法的替代方法,您可以改为使用NSURLSession的{​​{1}}方法:

dataTaskWithRequest:completionHandler: