web-dev-qa-db-ja.com

非同期リクエストの例

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

私のプロジェクトでは、sendSynchronousRequestNSURLConnectionを使用しました。それは時々私にクラッシュを与えます。

したがって、このコードをAsynchronousRequestに変換します。適切なコードが見つかりませんでした。

誰かが私のコードに適したリンクまたは郵便番号を教えてくれます。どんなhepも高く評価されます。

11
Xcode

できることがいくつかあります。

  1. sendAsynchronousRequestを使用して、コールバックブロックを処理できます。
  2. AFNetworkingライブラリを使用できます。これは、すべてのリクエストを非同期的に処理します。非常に使いやすく、セットアップも簡単です。

オプション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のコード:

ライブラリをダウンロードして、最初にプロジェクトに含めることをお勧めします。次に、以下を実行します。設定に関する投稿をフォローできます ここ

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];
20
Harish

NSURLConnectionの非推奨となったsendAsynchronousRequest:queue:completionHandler:メソッドの代わりに、代わりにNSURLSessiondataTaskWithRequest:completionHandler:メソッドを使用できます。

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.example.com"]];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    if (!error) {
        // Option 1 (from answer above):
        NSString *string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
        NSLog(@"%@", string);

        // Option 2 (if getting JSON data)
        NSError *jsonError = nil;
        NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&jsonError];
        NSLog(@"%@", dictionary);
    }
    else {
        NSLog(@"Error: %@", [error localizedDescription]);
    }
}];
[task resume];
3
bdev