1

geocodeAddressString次のクラス メソッドは、ブロックを非同期で実行するため、明らかに null 値を返します。

GCD を使用してこれを機能させるベスト プラクティスは何ですか?

+ (CLLocationCoordinate2D)reverseGeocoding:(NSString *)address
{
    CLLocationCoordinate2D  __block streetAddressCoordinates;

    CLGeocoder *streetAddressGeocoder = [[CLGeocoder alloc] init];

    [streetAddressGeocoder
        geocodeAddressString:address

        completionHandler:^(NSArray *placemarks, NSError *error)
        {
            if ([placemarks count] > 0 && error == nil)
            {
                CLPlacemark  *firstPlacemark;
                firstPlacemark = [placemarks objectAtIndex:0];
                streetAddressCoordinates = firstPlacemark.location.coordinate;
            }
            else if ([placemarks count] == 0 && error == nil){
                NSLog(@"Found no placemarks.");
            }
            else if (error != nil){ NSLog(@"An error occurred = %@", error);
            }
     }];

     return streetAddressCoordinates;
}
4

0 に答える 0