次のようなメソッドがあります。
-(NSString *)getCityFromLocation:(CLLocation *)location {
__block NSString *city;
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder reverseGeocodeLocation: location completionHandler:
^(NSArray *placemarks, NSError *error) {
//Get address
CLPlacemark *placemark = [placemarks objectAtIndex:0];
city = [placemark.addressDictionary objectForKey:@"City"];
NSLog(@"city 1: %@", city);
}];
return city;
}
そして、私はそれを次のように呼びます:
NSString *city = [self getCityFromLocation:currentLocation];
NSLog(@"city 2: %@", city);
NSLog では、次のようになります。
city 2: (null)
city 1: London
問題は明らかです。ブロックを実行する前に戻ってきます。ブロックによって生成された値を返すことができる場合、これを意図したとおりに機能させるにはどうすればよいですか?