reverseGeocodeLocation

reverseGeocodeLocation

我有一个坐标数组,可以通过for循环逐步执行。我想在每个位置的 map 上放置注释,并使用reverseGeocodeLocation找到标注的字幕作为坐标的地址。在for循环中,我调用reverseGeocodeLocation方法,并在完成代码块中创建注释并显示在 map 上但是,当我运行该应用程序时,仅显示一个注释。我进入调试器,并且完成块仅被调用一次(对于reverseGeocodeLocation方法的两次调用)。有什么建议可以解决这个问题吗?

我的for循环:

for(int i = 0; i < [locations count]; i++)
{
    CLLocation *location = [locations objectAtIndex:i];
    __block NSString *info;
    NSLog(@"Resolving the Address");
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error)
    {
        NSLog(@"Found placemarks: %@, error: %@", placemarks, error);
        if (error == nil && [placemarks count] > 0)
        {
            placemark = [placemarks lastObject];
            info = [NSString stringWithFormat:@"%@ %@ %@ %@, %@",
                    placemark.subThoroughfare, placemark.thoroughfare,
                    placemark.postalCode, placemark.locality,
                    placemark.administrativeArea];
            [self remainderOfMethod:location withAddress:info atIndex:i];
        }
        else
        {
            NSLog(@"%@", error.debugDescription);
        }
    } ];
}

然后在完成块中调用的方法:
- (void) remainderOfMethod: (CLLocation *)location withAddress:(NSString *)info atIndex: (int)i
{
     MKPointAnnotation* annotation = [[MKPointAnnotation alloc] init];
     if (location != nil)
     {
         [annotation setSubtitle:[NSString stringWithFormat:@"%@", info]];
         annotation.coordinate = location.coordinate;
         [self.mapView addAnnotation:annotation];
     }
}

谢谢!

最佳答案

从苹果官方文档中:

发起反向地理编码请求后,请勿尝试执行以下操作
发起另一个反向或正向地理编码请求

您可以在这里找到文档:https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLGeocoder_class/Reference/Reference.html#//apple_ref/occ/instm/CLGeocoder/reverseGeocodeLocation:completionHandler:

解决该问题的一种方法是,在每次迭代中从堆栈(或数组)中弹出一个位置的递归方法中,一次只执行一个请求。

即使在这种情况下,请考虑苹果公司对此有何评论:

地理编码请求受每个应用程序的速率限制,因此产生了太多请求
短时间内的请求可能会导致某些请求
失败

因此,您可能需要按需请求地理编码,例如,当用户点击注释时。

关于ios - reverseGeocodeLocation仅执行一次完成块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23072591/

10-14 23:12