没有可用 Internet 连接时的 CLGeocoder reverseGeocodeLocation 结果

Posted

技术标签:

【中文标题】没有可用 Internet 连接时的 CLGeocoder reverseGeocodeLocation 结果【英文标题】:CLGeocoder reverseGeocodeLocation results when no Internet connection is available 【发布时间】: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,所以他们显然修复/更改了它。 感谢您的尝试;是时候更新了! 【参考方案1】:

这是 iOS 5.0.x 的行为。在 5.1 及更高版本中,它变成了 kCLErrorNetwork,正如您所期望的那样。如果您使用来自https://***.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)。

【讨论】:

以上是关于没有可用 Internet 连接时的 CLGeocoder reverseGeocodeLocation 结果的主要内容,如果未能解决你的问题,请参考以下文章

AWS VPC:将 NAT 和 Internet 网关与负载均衡器和私有子网一起使用时的奇怪行为

套接字中没有可用数据时的异步编程模型

如何在没有来自脚本的 Internet 连接的情况下在 Python 中转发地理编码?

如果没有可用的互联网,如何将 ContentView 设置为另一个片段,如果连接可用,如何恢复片段

如何使程序仅在使用批处理或 powershell 有 Internet 连接时运行? [关闭]

代号一 - “未检测到连接”时的 ToastBar