【问题标题】:__block variable returns nil on method call__block 变量在方法调用时返回 nil
【发布时间】:2020-02-21 05:55:10
【问题描述】:

我有一个方法,它具有块字符串变量,该变量被传递以检索块函数内的 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;
 }

知道为什么会发生这种情况吗?提前致谢。

【问题讨论】:

    标签: ios objective-c function objective-c-blocks


    【解决方案1】:

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

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

    【讨论】:

    • 你能告诉我如何在方法中传递块吗?
    • 看看 callWebServiceGET_withAPIName 方法是怎么实现的。你需要为你的方法做同样的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多