CLGeocoder reverseGeocodeLocation выдает результат при отсутствии подключения к Интернету

Я вижу странные результаты при попытке обратного геокодирования местоположения, если сеть недоступна:

  • видно на iOS 5.0.1
  • Режим полета включен

    [geocoder reverseGeocodeLocation:whatever completionHandler:^(NSArray *placemarks, NSError *error) {
    if (error) 
    {
         // Alert(@"No Internet connection")!;
    
         // I should get a kCLErrorNetwork, but I get a kCLErrorGeocodeFoundPartialResult
         // with a placemark array containing a CLPlacemark *
         // with only a latitude and longitude (the ones I entered)...
    }
    else
    {
         // ...
    }
    

Это не задокументировано; по крайней мере я не нашел.

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


person etienne    schedule 26.02.2013    source источник
comment
Я попробовал на iOS 5.1.1 и iOS 6.2.1 и получил kCLErrorNetwork, так что они явно исправили/изменили.   -  person Rob    schedule 26.02.2013
comment
Спасибо за ваши попытки; тогда пора обновляться!   -  person etienne    schedule 26.02.2013


Ответы (1)


Это поведение iOS 5.0.x. В 5.1 и более поздних версиях он становится kCLErrorNetwork, как и следовало ожидать. Если вы используете макросы из https://stackoverflow.com/a/5337804/1271826, теоретически вы можете сделать что-то вроде:

[geocoder reverseGeocodeLocation:whatever completionHandler:^(NSArray *placemarks, NSError *error) {

    if (error) 
    {
         if (error.code == kCLErrorNetwork || (error.code == kCLErrorGeocodeFoundPartialResult && SYSTEM_VERSION_LESS_THAN(@"5.1")))
         {
             Alert(@"No Internet connection!");
         }
    }
    else
    {
         // ...
    }
}];

Таким образом, вы обработаете сетевую ошибку независимо от того, какую версию iOS использует пользователь (хотя, очевидно, только 5.0 и выше, учитывая, что CLGeocoder появилась в iOS 5.0).

person Rob    schedule 26.02.2013