1

这是我的代码和我尝试调用 reverseGeocodeLocation 的完整上下文:

CLLocationCoordinate2D touchMapCoordinate = 
[self.mapView convertPoint:touchPoint toCoordinateFromView:self.mapView];

CLLocation *destination = [[CLLocation alloc] initWithLatitude:touchMapCoordinate.latitude longitude:touchMapCoordinate.longitude];

__block CLGeocoder *destinationPin = [[CLGeocoder alloc] init];
__block NSString *destinationPinName;

[destinationPin reverseGeocodeLocation:destination completionHandler:^(NSArray *placemarks, NSError *error) {
    if (error){
        NSLog(@"Geocode failed with error: %@", error);
        return;
    }
    if(placemarks && placemarks.count > 0)
    {
        CLPlacemark *topResult = [placemarks objectAtIndex:0];

        NSString *addressTxt = [NSString stringWithFormat:@"%@ %@,%@ %@",
                                [topResult subThoroughfare],[topResult thoroughfare],
                                [topResult locality], [topResult administrativeArea]];

        destinationPinName = [[NSString alloc] initWithString:addressTxt];
    }
}];

annotation = [[MQAnnotation alloc] initWithTitle:destinationPinName andCoordinate:touchMapCoordinate];

我在函数入口点、函数的两个 if 块内以及分配注释的函数之后设置了断点。当我到达 reverseGeocodeLocation 块时,destinationPin 具有有效值,但我的程序一直直接跳转到函数调用后设置的断点。任何想法可能会发生什么?

4

1 回答 1

1

的执行reverseGeocodeLocation是异步完成的。当该后台任务完成时,将调用您的完成块。所以你看到的是正确的行为。调用reverseGeocodeLocation立即返回,早在它完成之前很久,在调用完成处理程序之前很久。您需要更新代码,以便在完成处理程序中创建注释。

于 2012-10-22T14:32:41.877 回答