Получить _ правильные_ координаты пользователя MapKit на симуляторе - PullRequest
0 голосов
/ 02 декабря 2011

ситуация следующая, я запускаю xCode 4.1 на MacOS 10.7, запускаю симулятор iPhone и использую MapKit, пытаюсь получить REAL координаты пользователя ... местоположение пользователя по умолчанию в Купертино, США ...чтобы получить кординаты этой точки, я использую:

self.mapView.userLocation.location.coordinate

... но это приводит меня к центру карты (в Африке) ...

Вопрос № 1: Почему ???Почему для пользователя установлен код Купертино, но его координаты (широта: 0, долгота: 0) в Африке?

... затем ...

Я настроил свой контроллер как CCLocationManagerDelegate иMKMapViewdelegate и инициализированный контроллер как делегат для событий CCLocationManagerDelegate ... но не был вызван ни один из этих методов делегата ...

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation

Вопрос № 2: Почему методы делегирования не запускаются даже один раз?

Мой контроллер:

//@interface MapController : UIViewController<CLLocationManagerDelegate, MKMapViewDelegate> 

//@property (nonatomic, retain) MapModel *mapModel;
//@property (nonatomic, retain) IBOutlet MKMapView *mapView;

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{ ... }

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{ ... }

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{ ... }

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.mapModel = [[[MapModel alloc] init:self] autorelease];

    [self.mapView setShowsUserLocation:YES];
    [self.mapView setZoomEnabled:YES];
    [self.mapView setScrollEnabled:YES];
    [self.mapView setMapType:MKMapTypeStandard];

    CLLocationCoordinate2D x = 
        self.mapView.userLocation.location.coordinate; // (0,0) why???

    //[self.mapView setRegion:xx animated:YES];
    //[self.mapView regionThatFits:self.mapModel.region];
    [[self.mapView userLocation] setCoordinate:[x coordinate]];
}

...

И модель:

   //@property (nonatomic, copy) NSString *user;
   //@property (nonatomic, copy) NSString *caption;
   //@property (nonatomic, copy) NSString *description;
   //@property (nonatomic, assign) MKCoordinateRegion region;
   //@property (nonatomic, retain) CLLocationManager *manager;

    - (id)init :(id)delegate
    {
        self.manager = [[[CLLocationManager alloc] init] autorelease];

        self.manager.delegate = delegate;
        self.manager.distanceFilter = kCLDistanceFilterNone;
        self.manager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
        [self.manager startUpdatingLocation];

        MKCoordinateRegion region = {{0, 0}, {0.2, 0.2}};

        self.region = region;

        return self;
    }

Спасибо, Art

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

Местоположение по умолчанию в симуляторе - Купертино. В последнем Xcode (4.2, я полагаю) вы можете установить местоположение симулятора из меню предварительно заполненных местоположений (к которому вы можете добавить свое собственное, просто включив файл GPX в ваш проект).

Если вы запускаете на устройстве И ВКЛЮЧАЕТЕ УСЛУГИ ЛОКАЦИИ ДЛЯ ПРИЛОЖЕНИЯ, вы должны получить действительное местоположение, используя свой код.

0 голосов
/ 03 декабря 2011

Позвольте мне прояснить мой вопрос ... Насколько я понимаю, userLocation на симуляторе все равно кажется нулевым ... хорошо ... но второй вопрос - почему метод CLLocationManagerDelegate "didUpdateToLocation" не вызывается?Я видел этот учебник, и его нужно вызывать даже на симуляторе ... Так что же я делаю не так?http://www.youtube.com/watch?v=qNMNRAbIDoU&feature=related Между тем я получаю такую ​​ошибку в журнале - «сервер не принял регистрацию клиента 68». Может ли это быть причиной того, что делегат местоположения не вызывается?

ОБНОВЛЕНИЕ:

Я попробовал это на xCode 4.3, и он все еще не работает ... При первом вызове userLocation он возвращает (0,0), во второй - (-180, -180)

Затем япереключился на IOS 5 SDK и теперь карта вообще не загружается с ошибкой - __GEORegisterNetworkDefaults_block_invoke_0: Could not connect to geod on com.apple.geod.defaults

ОБНОВЛЕНИЕ:

Удаление всех версий xCode и затем установка стабильной версии 4.2версия помогла ... Решено !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...