【问题标题】:MKReverseGeocoder server returned error: 503MKReverseGeocoder 服务器返回错误:503
【发布时间】:2011-02-25 20:33:52
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我现在正面临这个问题。找到解决方法了吗?

标签: iphone mapkit core-location mkreversegeocoder


【解决方案1】:

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

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

【讨论】:

  • 嗨,尼克你是对的,大多数情况下应用程序在印度下午 1 点之前显示此错误消息,之后它工作正常,我认为谷歌此时可能正在更新他们的服务器。
  • 真的是这个原因吗?我有一个用户可以拖动的图钉,它会使用新地址进行更新......如果是这种情况,用户将无法拖动图钉并看到它更新,除非它每 60 次少于一次秒...!
  • 我还注意到,通常情况下,我得到的第一个 503 是我第一次请求它。使用几次后,503 错误停止发生...
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我知道了!
    好吧,现在我们将不得不使用 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 错误。

    【讨论】:

    • 不幸的是没有为我工作。即使每次都取消它,如果调用过于频繁,MKReverseGeocoder 也会抛出 503。
    【解决方案4】:

    对我来说,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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2014-02-19
      • 2012-12-17
      • 2017-12-31
      • 2019-02-10
      • 2014-02-22
      • 2021-05-10
      相关资源
      最近更新 更多