目前我正在开发一个iPhone应用程序,我必须显示用户当前使用Mapkit Framework的城市和位置。当我构建应用程序时,它工作正常并向我显示确切的城市详细信息。但是现在当我尝试再次构建应用程序应用程序在我的日志中显示以下错误消息
/SourceCache/ProtocolBuffer_Sim/ProtocolBuffer-26/Runtime/PBRequester.m:523服务器返回错误:503
reverseGeocoder:didFailWithError:Error Domain = PBRequesterErrorDomain Code = 6001“无法完成操作。(PBRequesterErrorDomain错误6001。)”
是否有任何身体面临同样的问题,我该如何解决?
答案 0 :(得分:9)
我很确定这种情况正在发生,因为您正在测试,并且使用反向地理编码器太多而Google的服务器知道这一点。所以,它基本上阻止了你一段时间。稍后再试,看看它是否有效。
您需要确保每60秒不要多次调用地理编码器。
答案 1 :(得分:2)
我发现了! 好吧,现在我们必须使用CLGeocoder,但是如果你仍然想要使用MKReverseGeocoder,那么即使地理编码对象是一个全新的地理编码对象,你也不能两次调用[geocoder start]! 例如,不要这样做:
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
MKReverseGeocoder *geoCoder = [[[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate] autorelease];
geoCoder.delegate = self;
[geoCoder start];
}
或者你会得到一个恐怖:一旦检测到新位置,就会调用位置管理器更新位置功能。随着准确性越来越好,一个新的全新位置正被发送到“didUpdateToLocation”。
但每次找到一个位置时创建一个新对象MKReverseGeocoder是个坏主意!
所以,你有一些解决方案:
- 放置一个在启动地理编码器时为true的布尔值。然后在didFindPlacemark(地理编码器)中,您应该使用[地理编码器取消]停止地理编码器并将您的布尔值设置为false。
- 使地理编码器变量不是本地的,并且每次调用didUpdateToLocation时都会设置[地址解码器取消] +重新发布并创建一个新的地址和[地理编码器启动]。
- 避免[地理编码器启动]被调用两次的任何其他方式
我使用了第一个解决方案,再也没有得到503错误了。
答案 2 :(得分:2)
对我来说,MKReverseGeocoder失败了很多次。它也会在第一次被请求时失败,在60秒过后。因此,我决定放弃使用它,而是决定通过我创建的服务使用NSURLRequest直接访问Google的API,该服务还使用SBJSON框架将结果解析为JSON字符串(非常有用)。
从我的服务中,我按如下方式调用以下网址:
NSString *urlStr = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?latlng=%f,%f&sensor=true", coordinate.latitude, coordinate.longitude];
其中coordinate
是CLLocationCoordinate2D
。
我意识到这是一个很长的问题,但是由于转换到这个系统,我没有任何问题!
答案 3 :(得分:0)
它可以随机发生,具体取决于服务器的状态。