2015-04-01 2 views
0

J'utilise NSURLSession pour obtenir des informations de mon serveur. Après avoir obtenu les données, je l'affiche dans un UIAlertView, mais cela prend trop de temps à montrer. J'imprime les données avec le NSLog et l'imprime presque instantanément ... Alors qu'est-ce qui se passe? Est-ce que la méthode dataTaskWithRequest n'est pas asynchrone? Pourquoi cela prend autant de temps pour faire apparaître la vue d'alerte?UIAlertView prend trop de temps lors de l'utilisation à l'intérieur de NSURLSession

NSURLSession *session; 
session = [NSURLSession sharedSession]; 
NSURL * url = [NSURL URLWithString:[DRESSABLE_IP stringByAppendingString:@"index.php"]]; 
NSMutableURLRequest * urlRequest = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:CONNECTION_CACHEPOLICY timeoutInterval:CONNECTION_TIMEOUT]; 
[urlRequest setHTTPMethod:@"POST"]; 
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:urlRequest 
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
     NSString *total = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; 
     [[[UIAlertView alloc] initWithTitle:@"Title" message:total delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil] show]; 
}]; 

Répondre

7

Toutes les activités d'interface utilisateur doivent être effectuées dans la file d'attente principale.

NSURLSession *session; 
session = [NSURLSession sharedSession]; 
NSURL * url = [NSURL URLWithString:[DRESSABLE_IP stringByAppendingString:@"index.php"]]; 
NSMutableURLRequest * urlRequest = [[NSMutableURLRequest alloc] initWithURL:url cachePolicy:CONNECTION_CACHEPOLICY timeoutInterval:CONNECTION_TIMEOUT]; 
[urlRequest setHTTPMethod:@"POST"]; 
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:urlRequest 
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
     NSString *total = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; 
dispatch_async(dispatch_get_main_queue(),^{ 
     [[[UIAlertView alloc] initWithTitle:@"Title" message:total delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil] show]; 
}); 
}]; 
+0

Vous avez raison, merci beaucoup! –