[Résolu] Changer de ViewController après un NSURLSessionDataTask
Bonjour,
Je voudrais changer de ViewController après la fin d'un NSURLSessionDataTask.
Après la requête POST, le serveur répond avec du JSON. Selon les données reçues, je voudrais changer de ViewController (ou non). Le code actuel fonctionne, mais est très lent : après réception de la réponse du serveur et traitement (la ligne NSLog(@Fin du completionHandler); ), il faut 6 secondes pour changer de ViewController. Je pense que ça doit être à cause de la manière d'arrêter la requête, j'ai donc essayé [session invalidateAndCancel], ou encore avec la méthode - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveData:(NSData *)data entre autres, mais ça n'a rien changé. Voici le code :
NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSLog(@End);
int responseStatus = [[json objectForKey:@status] intValue];
NSString *responseString = [json objectForKey:@string];
NSLog(@statut : %d, responseStatus);
NSLog(@texte : %@", responseString);
if (responseStatus == 0 && ![responseString isEqualToString:@""]) {
[session invalidateAndCancel];
NSLog(@invalidé !);
MyViewController *mvc = [[MyViewController alloc] init];
[[self navigationController] setViewControllers:[NSArray arrayWithObject:mvc] animated:NO]; // Je pourrais faire ici "popToRootViewControllerAnimated:YES" au lieu d'initialiser un nouveau ViewController, mais ça met tout autant de temps.
NSLog(@Fin du completionHandler);
}
}];
[postDataTask resume];
Merci,
Edition : Ce lien a résolu mon problème !
Réponses
Instruments ne montre rien d'anormal, à part un leak de 64 Bytes UIKit GetContextStack...
Leaks est pour trouver les fuites mémoires.
Toi tu cherches à comprendre quelle(s) ligne(s) ralentissent ton code donc c'est via des outils comme le Time Profiler qui vont t'indiquer ça
Merci pour la réponse, sinon je viens d'enregistrer avec le Time Profiler entre le moment où j'appuie sur le bouton d'envoi du formulaire (la requête POST se faisant selon les données d'un formulaire) et l'apparition de la vue, je n'ai que des processus dont le temps est inférieur à 59ms... alors que l'attente est de 20 secondes.