MKErrorDomain ошибка 4 iPhone - PullRequest
       2

MKErrorDomain ошибка 4 iPhone

10 голосов
/ 13 октября 2010

Я получаю это случайно, когда я запускаю свое приложение GPS, которое я строю.Это не происходит каждый раз, и переданные координаты всегда действительны (пишите их).Где-то есть документация для них?

РЕДАКТИРОВАТЬ:

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

, а затем примерно в половине случаев он возвращает ошибкуЯ попытался освободить и переназначить геокодер, если произошла ошибка, но это не помогло.Единственное, что сделало, это перезапустило приложение.

Ответы [ 6 ]

11 голосов
/ 13 октября 2010

В "MKTypes.h" в платформе MapKit определено следующее:

Константы ошибок для каркаса Map Kit.

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

...

MKErrorPlacemarkNotFound

Указанная метка не найдена.

Похоже, вы ссылаетесь на неизвестную метку в своем коде?Или, возможно, у Google нет названия для позиции, которую вы проходите - какими бы действительными ни были координаты.

5 голосов
/ 09 ноября 2013

Я недавно встретил и решил эту проблему.В моем случае, когда Apple Map не может найти какой-либо результат для запроса, она иногда просто выдает эту ошибку «MKErrorDomain = 4».Таким образом, я просто обработал это как «результат не найден».

Было очень трудно это выяснить, MapKit нужна лучшая система обработки ошибок.

3 голосов
/ 29 января 2011

Я неоднократно нажимал на эту ошибку и не мог понять, как ее остановить;но в конце концов я нашел способ обойти всю проблему, которая работает довольно хорошо и требует чуть больше работы: вообще не используйте MKReverseGeocoder от Apple - вместо этого напрямую вызовите API обратного геокодирования Google (это, очевидно, тот же сервис, который MKReverseGeocoder делает за кадром).Вы можете вернуть либо JSON, либо XML (ваши предпочтения), которые вам затем придется проанализировать, но это не так уж сложно.

Например, поскольку мое приложение использует ASIHTTPRequest, это то, чтоэто выглядит так (хотя это также было бы легко сделать с помощью нативных API Apple, таких как 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];
}

Кстати, у API Google есть правила, как и у Apple.Обязательно прочитайте документы, особенно касающиеся квот.

2 голосов
/ 28 января 2011

Я сталкиваюсь с одной и той же вещью (иногда один и тот же код случайно дает сбой), и я думаю, что нашел ответ. От Документы Apple для разработчиков : «Каждое приложение Map Kit имеет ограниченную емкость для обратного геокодирования, поэтому в ваших интересах экономно использовать обратные запросы геокодирования».

Итак, моя теория заключается в том, что мы получаем ограничение по скорости ... поскольку никакие другие переменные не изменяются (т.е. мой код не меняется, я запускаю его на симуляторе, поэтому местоположение устройства не меняется изменение и т. д.) Я думаю, что это единственная оставшаяся причина.

1 голос
/ 24 октября 2010

Я только что закончил много исследований по этой проблеме, и, похоже, она находится вне наших рук. Я проверил форумы разработчиков, а также все вокруг Stack и в других местах, и ни у кого нет другого решения, кроме как использовать другой сервис. На эту тему есть очень хорошая тема на https://devforums.apple.com/message/154126.

Некоторые люди находят ошибку через определенное время, я просто обнаруживаю, что она исчезла некоторое время, а затем возвращается. Я посмотрел пример кода «Текущий адрес» и не мог понять, как я все испортил. Я запустил пример кода и, конечно же, это были ошибки NSLogging вместо возврата местоположения.

Эта ссылка содержит некоторый код с использованием обратного геокодера Google: http://www.iphonedevsdk.com/forum/iphone-sdk-development/31883-pbrequestererrordomain-errors-reverse-geocoding.html#post155793

0 голосов
/ 19 октября 2010

На самом деле, я тоже сталкиваюсь с этой проблемой.Код чрезвычайно компактен

// 1.запросить карту для текущих координат

CLLocationCoordinate2D userLocation;

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];

startGoG

и позже просто NSLog ошибка в методе делегата сбоя.Работает первый или два раза, потом перестает работать

...