想在iOS上获取城市名称,采用了一个方法
- (void)startedReverseGeoderWithLatitude:(double)latitude longitude:(double)longitude{
CLLocationCoordinate2D coordinate2D;
coordinate2D.longitude = longitude;
coordinate2D.latitude = latitude;
MKReverseGeocoder *geoCoder = [[MKReverseGeocoder alloc] initWithCoordinate:coordinate2D];
geoCoder.delegate = self;
[geoCoder start];
}
#pragma mark -
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark
{
NSString *subthroung=placemark.subThoroughfare;
NSString *local=placemark.locality;
NSLog(@"城市名:%@-%@-%@",placemark.locality,local,subthroung);
if (local) {
[cityLabel setText:local];
}
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error
{
}
原文参考:http://blog.youkuaiyun.com/diyagoanyhacker/article/details/6412557
上面的文章只给了一个实现类,对于新手来说,比较困难。
我在补充下,
增加框架,coreLocation.framework,MapKit.framework框架。
在实现文件中包括
#import <CoreLocation/CoreLocation.h>
#import <Mapkit/Mapkit.h>同时增加委托
CLLocationManagerDelegate,MKReverseGeocoderDelegate>直接编译运行,出现
server did not accept client registration 68经过google,终于找到这是个bug。原文 http://forums.bignerdranch.com/viewtopic.php?f=79&t=2069
解决方法在,实现文件的的#import 和 @implementation 之间增加如下代码(hach crash)
@implementation CLLocationManager (TemporaryHack)
- (void)hackLocationFix
{
CLLocation *location = [[CLLocation alloc] initWithLatitude:42 longitude:-50];
[[self delegate] locationManager:self didUpdateToLocation:location fromLocation:nil];
}
- (void)startUpdatingLocation
{
[self performSelector:@selector(hackLocationFix) withObject:nil afterDelay:0.1];
}经过重重磨难,终于跑起来了,也获得了经纬度,不过悲剧的是reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark ,方法没有执行。难道是模拟器的是?回家放到设备上看看去~
本文介绍了一种在iOS应用中通过经纬度获取城市名称的方法。利用MKReverseGeocoder进行逆地理编码,并展示了如何设置代理和处理回调。此外,还提供了解决特定bug的方法。
1699

被折叠的 条评论
为什么被折叠?



