使用CLGeocoder重复地理编码后,kCLErrorDomain错误2

jbu*_*s20 25 iphone core-location mapkit ios clgeocoder

我的应用程序中有一个搜索栏,用户可以输入一个地址,它会产生地理编码结果.根据以下代码,结果将根据用户类型进行更新:

- (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
    }];
}
Run Code Online (Sandbox Code Playgroud)

这适用于用户输入搜索字段的前几个字符.但是,在用户重复输入更多字符后,地理编码器开始出现以下错误(我知道这意味着网络存在问题):

ERROR during geocode: Error Domain=kCLErrorDomain Code=2 "The operation couldn’t be completed. (kCLErrorDomain error 2.)"
Run Code Online (Sandbox Code Playgroud)

在重新加载整个ViewController之前,地理编码器不会再次运行.为什么会发生这种情况,我该怎么做才能解决它?

Rei*_*ner 56

我相信原因如下:
Apple的地理编码器不会以同样的方式回答每个请求.相反,来自某个设备的第一个请求会被快速应答,但如果设备发送了100个或更多请求,则答案会越来越慢或者请求根本没有得到应答,这可能会导致您的错误.
当您重新加载视图控制器时,这只需要时间,地理编码服务器更愿意再次回答.从本质上讲,您无法对此做任何事情,因为地理编码器服务器希望保护自己免受来自单个设备的请求的过载.您只需限制在那里发送的请求数.
顺便说一句:文档说"你不应该每分钟发送多个地理编码请求".

  • 当然希望在开发过程中有一两个星期的宽限期:( (2认同)

Vla*_*rov 6

请注意,当设备离线时会返回同样的错误。