6

目前我正在开发一个 iPhone 应用程序,我必须在其中显示用户当前的城市和我正在使用 Mapkit 框架的位置。当我构建应用程序时,它工作正常并向我显示确切的城市详细信息。但是现在当我尝试构建再次应用程序应用程序在我的日志中显示以下错误消息

/SourceCache/ProtocolBuffer_Sim/ProtocolBuffer-26/Runtime/PBRequester.m:523 服务器返回错误:503

reverseGeocoder: didFailWithError:Error Domain=PBRequesterErrorDomain Code=6001 “操作无法完成。(PBRequesterErrorDomain 错误 6001。)”

是否有任何机构面临同样的问题,我该如何解决?

4

4 回答 4

9

我很确定这正在发生,因为您正在测试中,并且过多地使用反向地理编码器,而 Google 的服务器知道这一点。所以,它基本上已经阻止了你一段时间。稍后再试,看看它是否有效。

您需要确保每 60 秒调用地理编码器的次数不超过一次。

于 2010-05-31T18:48:56.633 回答
2

对我来说,MKReverseGeocoder 以 503 失败的次数太多了。它在第一次被请求时也会失败,在 60 秒过去之后。因此,我决定放弃使用它,而是决定通过我创建的服务直接使用 NSURLRequest 访问 Google 的 API,该服务还使用SBJSON框架将结果解析为 JSON 字符串(非常有用)。

在我的服务中,我调用以下 URL:

NSString *urlStr = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?latlng=%f,%f&sensor=true", coordinate.latitude, coordinate.longitude];

哪里coordinateCLLocationCoordinate2D

我意识到这个问题还有很长的路要走,但是自从转换到这个系统后,我没有遇到任何问题!

于 2012-01-20T15:57:49.790 回答
2

我发现!
好吧,现在我们将不得不使用 CLGeocoder,但是如果你还想使用 MKReverseGeocoder,你不能调用 [geocoder start] 两次,即使 geocode 对象是一个全新的对象!例如,不要这样做:

- (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 是个坏主意!因此,您有一些解决方案:
- 放置一个在地理编码器启动时为真的布尔值。然后在 didFindPlacemark(地理编码器)中,您应该使用 [geocoder cancel] 停止地理编码器并将布尔值设置为 false。
- 使地理编码器变量不是本地的,并在每次调用 didUpdateToLocation 时管理一个 [geocoder cancel] + realease 并创建一个新的和 [geocoder start]。
- 任何其他避免 [geocoder start] 被调用两次的方法

我使用了第一个解决方案,再也没有收到 503 错误。

于 2011-12-14T21:10:31.960 回答
0

它可以随机发生,具体取决于服务器的状态。

于 2011-09-14T14:48:32.840 回答