我的应用程序中有一个搜索栏,用户可以在其中输入地址,然后它将提供经过地理编码的结果。根据以下代码,结果随着用户键入而更新:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
    ...
    if (self.geocoder.geocoding) [self.geocoder cancelGeocode];
    [self.geocoder geocodeAddressString:searchText completionHandler:^(NSArray *placemarks, NSError *error) {
        if (error != nil) {
            NSLog(@"ERROR during geocode: %@", error.description);
            return;
        }
        //update the view
    }];
}

这适用于用户在搜索字段中输入的前几个字符。但是,在用户反复键入更多字符之后,地理编码器开始出现以下错误(我知道这意味着网络存在问题):
ERROR during geocode: Error Domain=kCLErrorDomain Code=2 "The operation couldn’t be completed. (kCLErrorDomain error 2.)"

在重新加载整个ViewController后,地理编码器才能再次工作。为什么会发生这种情况,我该怎么办才能解决呢?

最佳答案

我相信原因如下:
Apple的地址解析器不会以相同的方式回答每个请求。取而代之的是,来自特定设备的第一个请求会得到快速答复,但是如果设备发送了100个或更多请求,则答复的到达速度会越来越慢,或者根本无法答复请求,这可能会导致您出错。
重新加载 View Controller 时,这仅需要时间,并且地理编码服务器更愿意再次回答。
从本质上讲,您无法对此做任何事情,因为地理编码器服务器希望保护自己免受来自单个设备的请求的重载。您只需要限制发送到那里的请求数量。
顺便说一句:docs说“您每分钟发送的地理编码请求不应超过一个”。

关于iphone - 使用CLGeocoder反复进行地理编码后,kCLErrorDomain错误2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17867422/

10-11 17:24