【问题标题】:CLGeocoder reverseGeocodeLocation results when no Internet connection is available没有可用 Internet 连接时的 CLGeocoder reverseGeocodeLocation 结果
【发布时间】:2013-02-26 14:45:24
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我在 iOS 5.1.1 和 iOS 6.2.1 上试过并得到了kCLErrorNetwork,所以他们显然修复/更改了它。
  • 感谢您的尝试;是时候更新了!

标签: ios clgeocoder


【解决方案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 及更高版本,因为在 iOS 5.0 中引入了CLGeocoder)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    相关资源
    最近更新 更多