MKErrorDomain错误4 iPhone

Mar*_*rty 10 iphone mkreversegeocoder

当我运行我正在构建的gps应用程序时,我会随机获取此信息.它不会每次都发生,传入的坐标总是有效的(我会记录它们).这些地方有文件吗?

编辑:

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

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

Cla*_*och 11

在MapKit框架中的"MKTypes.h"中,定义了以下内容:

Map Kit框架的错误常量.

enum MKErrorCode {
   MKErrorUnknown = 1,
   MKErrorServerFailure,
   MKErrorLoadingThrottled,
   MKErrorPlacemarkNotFound,
};
Run Code Online (Sandbox Code Playgroud)

...

MKErrorPlacemarkNotFound

找不到指定的地标.

这听起来像你在代码中引用了一些未知的地标?或者可能是Google没有您要传递的位置的名称 - 但坐标可能有效.


Zin*_*ing 5

我最近遇到并解决了这个问题.在我的情况下,当Apple Map找不到查询的任何结果时,它有时会抛出这个"MKErrorDomain = 4"错误.所以我最终只是将其视为"未找到结果".

找到这个是很费劲的,MapKit需要一个更好的错误处理系统.


Mik*_*rty 3

我已经反复遇到这个错误,并且无法弄清楚如何让它停止;但我最终找到了一个解决整个问题的方法,效果很好,只需要多做一点工作:根本不要使用Apple的MKReverseGeocoder——相反,直接调用Google的反向地理编码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];
}
Run Code Online (Sandbox Code Playgroud)

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