Используйте CLLocationManager и MKReverseGeocoder, чтобы получить название города - PullRequest
2 голосов
/ 25 июля 2010

Я пытаюсь получить название города текущего местоположения пользователя с помощью 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

1 Ответ

8 голосов
/ 25 июля 2010

Добавить CoreLocation.framework для ссылки на ваш проект (целевые настройки / Связанные библиотеки / добавить / выбрать CoreLocation.framework)

Добавить: Вкратце, что делает каждый метод:

  • viewDidLoad:
    Создает CLLocationManager экземпляр и начинает обновлять местоположение - чтобы получить текущие пользовательские координаты

  • locationManager:didUpdateToLocation:
    Получается, когдаCLLocationManager получает пользовательские координаты.Теперь мы можем передать их MKReverseGeocoder, чтобы получить информацию о местоположении пользователя (страна, город и т. Д.)

  • locationManager:didFailWithError: и reverseGeocoder:didFailWithError:
    Обрабатывать возможные ошибки - просто зарегистрируйте ихв текущей реализации

  • reverseGeocoder: didFindPlacemark:
    Вызывается, когда MKReverseGeocoder находит информацию для вашей координаты, вы можете получить необходимую информацию из соответствующих полей MKPlacemark экземпляра, который вы получите.

kABPersonAddressCityKey - ключевая строка для поля City в словаре адресов меток.Он определен в заголовке ABPerson.h, потому что поля адреса для метки и адреса ABRecord одинаковы.Поэтому, чтобы использовать этот ключ, вам может потребоваться также ссылка на AddressBook framework.

...