MKMapView userLocation показывает 0,0 в симуляторе?
У меня есть окно mapView на моем представлении (MKMapViewDelegate) с включенным "Показывает местоположение пользователя".
В viewdidload для этого контроллера у меня есть
CLLocation *userLoc = mapView.userLocation.location;
CLLocationCoordinate2D userCoordinate = userLoc.coordinate;
NSLog(@"user latitude = %f",userCoordinate.latitude);
NSLog(@"user longitude = %f",userCoordinate.longitude);
mapView.delegate=self;
Симулятор показывает правильное местоположение пользователя на карте (я использую Custom location в IOS Simulator)
Но NSLog показывает 0 и 0 для широты и долготы.
Не могу ли я получить пользовательскую долготу и широту в симуляторе?
ОБНОВЛЕНИЕ С ОТВЕТОМ:
Необходимо реализовать
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
self.mapView.centerCoordinate = userLocation.location.coordinate;
}
Ответы
Ответ 1
Службы местоположения не являются мгновенными. Ваш код находится в viewDidLoad
, поэтому у него еще не было возможности получить исправление на вашей позиции. Вы должны установить свойство delegate
для отображения карты объекту, реализующему протокол MKMapViewDelegate
.
Ответ 2
Мне нужно было установить местоположение в симуляторе через Debug > Location. Он был установлен в None, который меня бросил (0 °, 0 °) и никогда не обновлялся; вы можете установить пользовательское местоположение или выбрать из других сценариев симулированного местоположения, которые автоматически меняют местоположение пользователя.
Ответ 3
MKMapView *mapview=[[MKMapView alloc]initWithFrame:CGRectMake(0,0,300, 364)];
mapview.delegate=self;
mapview.showsUserLocation=YES;
который затем назовет делегата mapkit, делегат mak kit попытается распечатать координаты.
NSLog (@ "user latitude =% f", userLocation.location.coordinate.latitude);
NSLog (@ "useritude =% f", userLocation.location.coordinate.longitude);