1

ネットワークが利用できない場合に場所をリバース ジオコーディングしようとすると、奇妙な結果が表示されます。

  • iOS 5.0.1 で見られる
  • 機内モードON

    [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
    {
         // ...
    }
    

これは文書化されていません。少なくとも私は見つけられませんでした。

ネットワークなしでアドレスを適切に逆ジオコーディングすることは期待できないため、それ自体は大きな問題ではありませんが、ユーザーに情報メッセージを表示することはできません。

4

1 に答える 1

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
    {
         // ...
    }
}];

CLGeocoderそうすれば、ユーザーが実行している iOS のバージョンに関係なく、ネットワーク エラーを処理できます (ただし、 iOS 5.0 で導入されたことを考えると、明らかに 5.0 以降のみです)。

于 2013-02-26T16:48:08.340 に答える