1

如果网络不可用,我在尝试对位置进行反向地理编码时看到奇怪的结果:

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

这没有记录;至少我找不到它。

这本身并不是什么大问题,因为我不能指望它在没有网络的情况下正确地对地址进行反向地理编码,但它会阻止我向用户显示信息性消息。

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

这样,无论用户运行的是什么 iOS 版本,您都可以处理网络错误(但显然,只有 5.0 及更高版本,因为它CLGeocoder是在 iOS 5.0 中引入的)。

于 2013-02-26T16:48:08.340 回答