与CLGeocoder重复地理编码后,kCLErrorDomain错误2
我在我的应用程序中有一个search栏,用户可以input一个地址,它会提供地理编码的结果。 结果更新为用户types,根据以下代码:
- (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 }]; }
这适用于用户inputsearch字段的前几个字符。 然而,在用户重复input更多的字符后,地理编码器开始给出以下错误(我知道这意味着networking有问题):
ERROR during geocode: Error Domain=kCLErrorDomain Code=2 "The operation couldn't be completed. (kCLErrorDomain error 2.)"
在整个ViewController重新加载之前,地理编码器不能再次工作。 为什么会发生这种情况,我能做些什么来解决呢?
我相信原因如下:
苹果的地理编码器不会以相同的方式回答每一个请求。 相反,来自某个设备的第一个请求会很快得到回应,但是如果设备发送了100个或更多的请求,答案就会越来越慢,或者请求根本就没有回答,这可能会导致错误。
当您重新加载视图控制器时,这只需要花费时间,地理编码服务器更愿意再次回答。 从本质上讲,您无法做任何事情,因为地理编码器服务器希望保护自己免受来自单个设备的请求超载。 你只需要限制你发送的请求数量。
顺便说一下: 文档说“你不应该每分钟发送一个以上的地理编码请求”。