[objective-c] 40 secondes pour afficher un label !

benoit09

Membre enregistré
27 Octobre 2017
3
0
30
Bonjour,
Je suis débutant en développement iphone, je souhaite faire une requête post vers un service web et afficher le résultat dans un label, ça fonctionne sauf que le résultat s'affiche en moyenne 40 secondes plus tard ! J'affiche aussi dans la console le résultat au même moment et dans la console c'est immédiatement là ! Avez-vous une idée ? Voici mon code :

Bloc de code:
-(void) viewDidAppear:(BOOL)animated{
    
    if(_mavariable != nil){
        NSString *post = [NSString stringWithFormat:@"%@;%@",_mavariable,_unesecondevariable];
        NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
        NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
        [request setURL:[NSURL URLWithString:@"https://ladressedemonserviceweb"]];
        [request setHTTPMethod:@"POST"];
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
        [request setHTTPBody:postData];
        NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
        [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"Request reply: %@", requestReply);
            _lblMessage.text = requestReply;
        }] resume];
       
    }
}
 
après tout un week-end a essayer différentes manière de taper ma recherche sur google, j'ai fini par trouver la solution, au lieu de mettre juste _lblMessage.text = requestReply mettre :

Bloc de code:
dispatch_async(dispatch_get_main_queue(), ^{
                _lblMessage.text = requestReply;});
        }] resume];
 
Normalement, XCode te donne un warning en violet (Run Time Error).
Il te rappelle que tout changement d'UI doit se faire dans le main thread.