cómo enviar una solicitud de URL asíncrona?

Me gustaría saber cómo obtengo un valor de retorno de 1 o 0 solamente … de regreso de una solicitud de URL de forma asincrónica.

actualmente lo hago de esta manera:

NSString *UTCString = [NSString stringWithFormat:@"http://web.blah.net/question/CheckQuestions?utc=%0.f",[lastUTCDate timeIntervalSince1970]]; NSLog(@"UTC String %@",UTCString); NSURL *updateDataURL = [NSURL URLWithString:UTCString]; NSString *checkValue = [NSString stringWithContentsOfURL:updateDataURL encoding:NSASCIIStringEncoding error:Nil]; NSLog(@"check Value %@",checkValue); 

esto funciona, sin embargo, está bloqueando mi hilo principal hasta que recibí una respuesta de la URL, ¿cómo lo configuro para que lo haga en otro hilo en lugar del hilo principal?

EDITAR: RESPUESTA Termino de invocar mi función con esto, funciona bien 🙂

 [self performSelectorInBackground:@selector(shouldCheckForUpdate) withObject:nil]; 

puedes usar la clase NSURLConnection

 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; [[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease]; 

y manejar su respuesta y errores utilizando sus métodos delegates.

 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error - (void)connectionDidFinishLoading:(NSURLConnection *)connection 

Puede encontrar la implementación de NSURLConnection

  • Documentos de Apple: utilizando NSURLConnection
  • Cómo usar iOS NSURLConnection por ejemplo

Editar: aunque NSURLConnection es proporcionado por Apple, es una forma más recomendada de realizar una solicitud de URL. Pero encontré que la biblioteca de AFNetworking mucho tiempo, es fácil de implementar y robusta pero simple como la implementación de un tercero. Usted debe darle una oportunidad.

prueba esto :

.h:

 NSMutableData *responseData; 

.metro:

 - (void)load { NSURL *myURL = [NSURL URLWithString:@"http://www.example.com"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60]; [[NSURLConnection alloc] initWithRequest:request delegate:self]; } - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { responseData = [[NSMutableData alloc] init]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [responseData appendData:data]; } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { [responseData release]; [connection release]; [textView setString:@"Unable to fetch data"]; } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"Succeeded! Received %d bytes of data",[responseData length]); NSString *txt = [[[NSString alloc] initWithData:responseData encoding: NSASCIIStringEncoding] autorelease]; } 

Use NSURLConnection y haga su pedido. Entonces puede iniciar una conexión sincrónica o asincrónica con los métodos de NSURLConnection:

Cargando datos sincrónicamente

 + sendSynchronousRequest:returningResponse:error: 

Cargando datos asincrónicamente

 + connectionWithRequest:delegate: – initWithRequest:delegate: – initWithRequest:delegate:startImmediately: – start 

Verifique la clase NSURLConnection en Apple Developer API Reference.

Desvergonzadamente copia de https://gist.github.com/knmshk/3027474 . Todos los créditos van a https://gist.github.com/knmshk .

 xmlData = [[NSMutableData alloc] init]; NSURL *url = [NSURL URLWithString: @"http://forrums.bignerdranch.com/smartfeed.php?" @"limit=NO_LIMIT&count_limit20&sort_by=standard&" @"feed_type=RSS2.0&feed_style=COMPACT"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; //connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; NSOperationQueue *queue = [[NSOperationQueue alloc]init]; [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){ if (error) { xmlData = nil; NSLog(@"error:%@", error.localizedDescription); } [xmlData appendData:data]; }]; 

Hay un ejemplo en la documentación de XCode de iOS llamada LazyTableImages. Esto produce una URL asíncrona y una carga asíncrona de imágenes en UITableView celdas de UITableView se muestran en la pantalla una vez que se detiene el desplazamiento. Excelente ejemplo de protocolos, manejo asíncrono de datos, etc.