0
 CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(27.941761 , -82.171537);

    MKReverseGeocoder *reverseGeocoder =[[MKReverseGeocoder alloc] initWithCoordinate:coordinate];
    NSLog(@"%g",coordinate.latitude);
    NSLog(@"%g",coordinate.longitude);
    reverseGeocoder.delegate = self;
    [reverseGeocoder start];
//????????????????????????????????????????????????????????????????????????

}

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error{
NSLog(@"MKReverseGeocoder has failed.");
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark            *)placemark{

NSLog(@"current place is :%@",placemark);
}

当我使用手写坐标时,reverseGeocoding 失败。但是当我使用从 (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 获取的坐标时,成功。为什么?

4

1 回答 1

1

当我将您的代码放入测试项目时,它对我来说非常好:

2013-08-16 23:45:55.966 TestMapApp[11261:a0b] 27.9418
2013-08-16 23:45:55.967 TestMapApp[11261:a0b] -82.1715
2013-08-16 23:45:57.831 TestMapApp[11261:a0b] current place is :6015 W Farkas And Turkey Creek Rd, Plant City, FL  33567, United States @ <+27.94176100,-82.17153700> +/- 0.00m

这是我认为出了问题的地方。您正在使用 ARC 而不是将您的“ reverseGeocoder”保存在任何地方(例如在 ivar 或属性中),因此一旦您创建“ reverseGeocoder”的函数完成,ARC 就会释放它。

其他几件事:

如果委托方法中有错误参数可供您使用,您应该使用它们。像这样:

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error{
    NSLog(@"MKReverseGeocoder has failed with error %@.", [error localizedDescription]);
}

最后也是最重要的是,“ MKReverseGeocoder”自 iOS 5 以来已被弃用。很有可能它会在未来的 iOS 版本中消失。您应该尝试找到用于反向地理编码的替代品。

于 2013-08-17T06:49:16.243 回答