iphone - unirse - cómo enviar una solicitud de URL asíncrona?
por que no puedo unirme a un directo en instagram (5)
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];
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.
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.
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];
}
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 delegados.
- (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
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.