2

我正在尝试使用 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

这是我的代码:

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
4

1 回答 1

8

添加CoreLocation.framework到您的项目的链接(目标设置/链接库/添加/选择CoreLocation.framework)

添加:简要介绍每种方法的作用:

  • viewDidLoad:
    创建CLLocationManager实例并开始更新位置 - 获取当前用户坐标

  • locationManager:didUpdateToLocation:
    当 CLLocationManager 接收到用户坐标时被调用。现在我们可以将它们传递MKReverseGeocoder给获取用户位置(国家、城市等)的信息

  • locationManager:didFailWithError:reverseGeocoder:didFailWithError:
    处理可能的错误 - 只需将它们记录在当前实现中

  • reverseGeocoder:didFindPlacemark:在为您的坐标找到信息
    时调用,您可以从您获取的实例的相应字段中检索您需要的信息。MKReverseGeocoderMKPlacemark

kABPersonAddressCityKey- 是地标地址字典中城市字段的键字符串。它在 ABPerson.h 头文件中定义,因为地标和 ABRecord 地址的地址字段相同。因此,要使用该密钥,您可能还需要与AddressBook框架链接。

于 2010-07-25T16:45:42.510 回答