【问题标题】:MKErrorDomain error 4 iPhoneMKErrorDomain 错误 4 iPhone
【发布时间】:2013-11-09 08:47:52
【问题描述】:

当我运行我正在构建的 gps 应用程序时,我总是随机得到这个。它不会每次都发生,并且传入的坐标始终有效(我 nslog 它们)。在某处有这些文档吗?

编辑:

CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(locManager.location.coordinate.latitude, locManager.location.coordinate.longitude);
geocoder1 = [[MKReverseGeocoder alloc] initWithCoordinate:coord];
geocoder1.delegate = self;
[geocoder1 start];

然后大约一半的时间返回错误。如果出现错误,我尝试释放并重新分配地理编码器,但这没有帮助。唯一要做的就是重新启动应用程序。

【问题讨论】:

  • 我最近刚开始遇到同样的错误。这对我来说也是不稳定的 - 有时地理编码器工作正常,有时它只是返回一个错误,同时每次传递相同或非常相似的坐标。也许谷歌地理编码器有一些问题?
  • 有同样的问题。有时它适用于 Maps.app,但不适用于我的应用程序。然后它再次工作。可能是 Google 服务器的负载问题?

标签: iphone mkreversegeocoder


【解决方案1】:

在MapKit框架的“MKTypes.h”中,定义如下:

Map Kit 框架的错误常量。

enum MKErrorCode {
   MKErrorUnknown = 1,
   MKErrorServerFailure,
   MKErrorLoadingThrottled,
   MKErrorPlacemarkNotFound,
};

...

MKErrorPlacemarkNotFound

找不到指定的地标。

这听起来像是您在代码中引用了一些未知的地标?或者可能是 Google 没有您要经过的位置的名称 - 无论坐标是否有效。

【讨论】:

  • 是的,我遇到了这些常量,但问题是如何修复它,更奇怪的是,为什么它似乎是随机发生的。是否可能在不同时间获得不同级别的准确度并且小数位数更多/更少?
  • 如果您发布了一些代码来显示您在哪里得到这些错误,那么为您提供帮助会容易得多。
  • 更新:现在还有第 5 个错误,MKErrorDirectionsNotFound 以防有人收到错误 5。
【解决方案2】:

我最近遇到并解决了这个问题。就我而言,当 Apple Map 找不到任何查询结果时,它有时会抛出这个“MKErrorDomain = 4”错误。所以我最终只是将其视为“未找到结果”。

发现这一点很费劲,MapKit 需要更好的错误处理系统。

【讨论】:

    【解决方案3】:

    我反复遇到这个错误,但无法弄清楚如何让它停止;但我终于找到了一个很好的解决整个问题的方法,只需要多做一点工作:根本不要使用苹果的MKReverseGeocoder——而是直接调用Google's reverse-geocoding API(这显然是一样的MKReverseGeocoder 在幕后提供的服务)。您可以取回 JSON 或 XML(您的偏好),然后您必须对其进行解析,但这并不难。

    例如,由于我的应用使用ASIHTTPRequest,这就是它的样子(尽管使用 Apple 的原生 API,例如 NSURLConnection,这也很容易做到):

    #pragma mark -
    #pragma mark CLLocationManagerDelegate
    
    - (void)locationManager:(CLLocationManager *)manager 
        didUpdateToLocation:(CLLocation *)newLocation 
               fromLocation:(CLLocation *)oldLocation
    {
        // Be careful: My code is passing sensor=true, because I got the lat/long
        // from the iPhone's location services, but if you are passing in a lat/long
        // that was obtained by some other means, you must pass sensor=false.
        NSString* urlStr = [NSString stringWithFormat:
          @"http://maps.googleapis.com/maps/api/geocode/xml?latlng=%f,%f&sensor=true",
          newLocation.coordinate.latitude, newLocation.coordinate.longitude];
        NSURL* url = [NSURL URLWithString:urlStr];
        self.reverseGeocoderRequest = [ASIHTTPRequest requestWithURL:url];
        self.reverseGeocoderRequest.delegate = self;
        [self.reverseGeocoderRequest startAsynchronous];
    }
    

    顺便说一句,Google 的 API 也有规则,就像 Apple 的一样。请务必阅读文档,尤其是关于配额的文档。

    【讨论】:

      【解决方案4】:

      我遇到了同样的事情(完全相同的代码有时会随机失败),我想我已经找到了答案。来自Apple's developer docs:“每个 Map Kit 应用程序的反向地理编码能力都是有限的,因此谨慎使用反向地理编码请求对您有利。”

      所以我的理论是,我们正在受到速率限制......因为没有其他变量正在改变(即我的代码没有改变,我在模拟器上运行它,所以设备的位置不是变化等)我认为这一定是唯一剩下的原因。

      【讨论】:

        【解决方案5】:

        我刚刚完成了对这个问题的大量研究,但它似乎不在我们的控制范围内。我查看了开发者论坛以及 Stack 和其他地方的所有内容,除了使用不同的服务之外,没有人有解决方案。 https://devforums.apple.com/message/154126 有一个关于这个主题的很好的帖子。

        有些人在一段时间后发现错误,我只是发现它出现了一段时间然后又回来了。我查看了“当前地址”示例代码,但看不出我可能搞砸了。我运行了示例代码,果然是 NSLogging 错误而不是返回位置。

        此链接有一些使用谷歌反向地理编码器的代码:http://www.iphonedevsdk.com/forum/iphone-sdk-development/31883-pbrequestererrordomain-errors-reverse-geocoding.html#post155793

        【讨论】:

          【解决方案6】:

          其实我也遇到了这个问题。代码非常紧凑

          //1.向地图询问当前坐标

          CLLocationCoordinate2D 用户位置;

          userLocation.latitude = [[_theMapView.userLocation location] 坐标].latitude; userLocation.longitude = [[_theMapView.userLocation location] 坐标].longitude;

          NSLog(@"%f, %f",userLocation.latitude,userLocation.longitude);

          //2.反向地理编码坐标

          MKReverseGeocoder *reverseGeocoder = [[MKReverseGeocoder alloc] initWithCoordinate:userLocation];

          [reverseGeocoder setDelegate:self];

          [reverseGeocoder 开始];

          稍后只需 NSLog 失败委托方法中的错误。它第一次或两次有效,然后停止工作

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多