如果网络不可用,我在尝试反转地理编码位置时会看到奇怪的结果:
飞行模式开启
[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
{
// ...
}
没有记录;至少我找不到它。
这本身并不是一个大问题,因为我不能指望它在没有网络的情况下正确地反转地理编码地址,但它阻止我向用户显示信息性消息。
答案 0 :(得分: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
)。