____块变量在方法调用时返回nil

问题描述 投票:0回答:1

我有一个方法,该方法具有块字符串变量,该变量被传递以在块函数内部检索API数据。但是它返回nil。在调试时,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;
 }

关于为什么会发生这种情况的任何想法?预先感谢。

ios objective-c swift function objective-c-blocks
1个回答
0
投票

原因是方法callWebServiceGET_withAPIName以异步方式工作。因此,在返回完成处理程序之前,您的代码将到达函数的末尾,例如,并将addressPlace返回为nil。

要解决这个问题,您还应该在getAddressForPlaceAPI方法的参数中传递一个块。因此,只要您的成功块执行一次callWebServiceGET_withAPIName返回该值,就可以将该值返回给父块。

© www.soinside.com 2019 - 2024. All rights reserved.