我有一个方法,该方法具有块字符串变量,该变量被传递以在块函数内部检索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;
}
关于为什么会发生这种情况的任何想法?预先感谢。
原因是方法callWebServiceGET_withAPIName
以异步方式工作。因此,在返回完成处理程序之前,您的代码将到达函数的末尾,例如,并将addressPlace返回为nil。
要解决这个问题,您还应该在getAddressForPlaceAPI
方法的参数中传递一个块。因此,只要您的成功块执行一次callWebServiceGET_withAPIName
返回该值,就可以将该值返回给父块。