Получить _correct_ координаты пользователя MapKit на симуляторе

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

self.mapView.userLocation.location.coordinate

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

Вопрос №1: Почему??? Почему пользовательский контакт установлен в Купертино, но его координаты (lat: 0, lon: 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
</mkannotation>

Вопрос №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]];
}

...
</mkannotation></cllocationmanagerdelegate,>

И модель:

//@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 ответа

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

Если вы запустили устройство и включили сервисы LOCATION для APP, вы должны получить правильное местоположение, используя свой код.


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

ОБНОВИТЬ :

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

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

ОБНОВИТЬ :

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

licensed under cc by-sa 3.0 with attribution.