首页 > 解决方案 > __block 变量在方法调用时返回 nil

问题描述

我有一个方法,它具有块字符串变量,该变量被传递以检索块函数内的 API 数据。但是它返回零。在调试时,addressPlace 的值为零。

 - (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;
 }

关于为什么会发生这种情况的任何想法?提前致谢。

标签: iosobjective-cfunctionobjective-c-blocks

解决方案


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

为了解决这个问题,您还应该在方法的参数中传递一个块getAddressForPlaceAPI。因此,每当您的成功块执行一次callWebServiceGET_withAPIName返回值时,您都可以将值扔回父块。


推荐阅读