Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Objective-C Discussion :

Au sein du bloc !


Sujet :

Objective-C

  1. #1
    Membre à l'essai
    Au sein du bloc !
    Bonjour a tous,
    Mon probleme est simple ... J'espere que la solution l'est aussi.

    Voici mon code :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    __block NSString * response; //la fameuse !
     
        [deviceInfo.geocoder reverseGeocodeLocation:deviceInfo.locationProperties completionHandler:
     
         ^(NSArray *placemarks, NSError *error) {
     
             [placemarks copy];
             //Get nearby address
             CLPlacemark *placemark = [placemarks objectAtIndex:0];
     
             NSLog(@"Country : %@",placemark.country);
             response =placemark.country;
         }
         ];
     
        //-----------------------------------------------
        NSLog(@"Response COUNTRY : %@",response); // response vaut NULL

    A l'affichage, response vaut NULL. J'aimerais que response soit egal a placemark.country, qui lui a l affichage vaut France.

    De plus, le bloc semble s executer tout a la fin car j'ai d'abord l'affichage de response puis celui de placemark.country.

    Comment faire ?????! je seche !

    merci d'avance pour vos reponses !

  2. #2
    Membre habitué
    En fait c'est parce que ton bloc est exécuté en asynchrone
    Du coup quand ton
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    NSLog(@"Response COUNTRY : %@",response); // response vaut NULL

    est exécuté, ton block n'a pas encore été résolu

    Sans être un grand devin je suppose que tu fait une géolocalisation, donc tu te doute que celle ci n'est pas instantanée

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    __block NSString * response; //la fameuse !
     
        [deviceInfo.geocoder reverseGeocodeLocation:deviceInfo.locationProperties completionHandler:
     
         ^(NSArray *placemarks, NSError *error) {
     
             [placemarks copy];
             //Get nearby address
             CLPlacemark *placemark = [placemarks objectAtIndex:0];
     
             NSLog(@"Country : %@",placemark.country);
             response =placemark.country;
             NSLog(@"Response COUNTRY : %@",response); // ça affiche une réponse au bout de X secondes 
         }];
     
        //-----------------------------------------------
        NSLog(@"Response COUNTRY : %@",response); // response vaut NULL