Переменная __block возвращает nil при вызове метода - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть метод, который имеет строковую переменную блока, которая передается для получения данных API внутри функции блока. Однако это возвращает ноль. При отладке addressPlace имеет значение nil.

 - (NSString *)getAddressForPlaceAPI:(double)latitudePassed longitude:(double)longitudePassed
 {
    __block NSString * addressPlace = nil;
    NSString *url = @"";
    url = [NSString stringWithFormat:@"%@lat=%@&lng=%@",kGeoCodeURL, [NSString    stringWithFormat:@"%f",latitudePassed],[NSString stringWithFormat:@"%f", longitudePassed]];
   [WebServiceObj callWebServiceGET_withAPIName:url withParam:nil withCompletion:^(BOOL isSuceess, NSDictionary *response)
   {
         if(isSuceess)
         {
                 addressPlace = [[response valueForKey:KEY_RESULTS][0] valueForKey:KEY_FORMATTEDADDRESS];
                 NSLog(@"ADDRESSPP*** = %@",addressPlace);

         }
         else
         {
             NSLog(@"FAIL API = %s","FAIL");
         }
 }];
return addressPlace;
 }

Есть идеи, почему это может происходить? Заранее спасибо.

1 Ответ

1 голос
/ 21 февраля 2020

Причина в том, что метод callWebServiceGET_withAPIName работает асинхронно. Поэтому, прежде чем он вернется в обработчик завершения, ваш код достигнет конца функции like и вернет addressPlace как nil.

Чтобы решить эту проблему, вы также должны передать блок в аргументе метода getAddressForPlaceAPI. Таким образом, всякий раз, когда ваш успешный блок выполняется, когда callWebServiceGET_withAPIName возвращает значение, вы можете выбросить его обратно в родительский блок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...