Ash*_*osh 2 objective-c mkmapview cllocationmanager mkreversegeocoder
我试图通过使用MKReverseGeoCoder获取用户当前位置的城市名称,但它有一些我无法识别的错误.以下是详细信息:
它有一些我无法识别的错误
Undefined symbols:
".objc_class_name_CLLocationManager", referenced from:
literal-pointer@__OBJC@__cls_refs@CLLocationManager in mapViewController.o
"_kCLLocationAccuracyNearestTenMeters", referenced from:
_kCLLocationAccuracyNearestTenMeters$non_lazy_ptr in mapViewController.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
在这里;我的代码:
mapViewController.m
//
// mapViewController.m
// map
//
// Created by Ashutosh Tiwari on 7/23/10.
// Copyright ISU 2010. All rights reserved.
//
#import <MapKit/MapKit.h>
#import "mapViewController.h"
@implementation mapViewController
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
CLLocationManager *locationManager = [[[CLLocationManager alloc] init] autorelease];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
[locationManager startUpdatingLocation];
[super viewDidLoad];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
MKReverseGeocoder *geoCoder = [[MKReverseGeocoder alloc] initWithCoordinate:newLocation.coordinate];
geoCoder.delegate = self;
[geoCoder start];
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"locationManager:%@ didFailWithError:%@", manager, error);
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark
{
MKPlacemark * myPlacemark = placemark;
NSString *kABPersonAddressCityKey;
NSString *city = [myPlacemark.addressDictionary objectForKey:(NSString*) kABPersonAddressCityKey];
}
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFailWithError:(NSError *)error
{
NSLog(@"reverseGeocoder:%@ didFailWithError:%@", geocoder, error);
}
- (void)dealloc {
[super dealloc];
}
@end
Run Code Online (Sandbox Code Playgroud)
添加CoreLocation.framework到项目的链接(目标设置/链接库/添加/选择CoreLocation.framework)
添加:简要说明每种方法的作用:
viewDidLoad:
创建CLLocationManager实例并开始更新位置 - 获取当前用户坐标
locationManager:didUpdateToLocation:
当CLLocationManager接收用户坐标时调用.现在我们可以传递它们以MKReverseGeocoder获取用户位置(国家,城市等)的信息
locationManager:didFailWithError:并reverseGeocoder:didFailWithError:
处理可能的错误 - 只需将它们记录在当前实现中
reverseGeocoder:didFindPlacemark:
在MKReverseGeocoder找到坐标信息时调用,您可以从MKPlacemark实例的相应字段中检索所需的信息.
kABPersonAddressCityKey - 是地标地址字典中City字段的关键字符串.它在ABPerson.h头文件中定义,因为placemark和ABRecord地址的地址字段是相同的.因此,要使用该密钥,您可能还需要与AddressBook框架链接.