[Résolu] Changer de ViewController après un NSURLSessionDataTask

hugohugo Membre
février 2014 modifié dans API UIKit #1

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

  • AliGatorAliGator Membre, Modérateur
    Instruments.
  • hugohugo Membre
    février 2014 modifié #3

    Instruments ne montre rien d'anormal, à  part un leak de 64 Bytes UIKit GetContextStack...


  • AliGatorAliGator Membre, Modérateur
    Heu pourquoi tu lancerais l'outil leaks pour investiguer un problème de performances ?!?


    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
  • hugohugo Membre
    février 2014 modifié #5

    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.


Connectez-vous ou Inscrivez-vous pour répondre.