MKMapViewDelegate MapView: didUpdateUserLocation: метод, не вызываемый в iOS5

#ios #mkmapview #ios5 #mkmapviewdelegate

#iOS #mkmapview #ios5 #mkmapviewdelegate

Вопрос:

MKMapViewDelegate MapView:didUpdateUserLocation: метод не вызывается при запуске в симуляторе 5.0, даже если все разрешения на местоположение указаны в настройках устройства.

С 4.3 он работает нормально.

Есть идеи?

Ответ №1:

Я получил то же самое после рефакторинга в ARC.

Сначала у меня был следующий код в viewDidLoad;

 CLLocationManager *lm =[[CLLocationManager alloc] init];
lm.delegate = self;
lm.desiredAccuracy = kCLLocationAccuracyBest;
[lm startUpdatingLocation];
  

Я сделал следующее в файле заголовка

 @interface ViewController : UIViewController <CLLocationManagerDelegate>
{
CLLocationManager *locationManager;
}

@property(nonatomic, strong)CLLocationManager *locationManager;
  

И

 @synthesize locationManager;
  

Код, который я изменяю в viewDidLoad

 locationManager =[[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
  

Ответ №2:

Проверьте «setUserTrackingMode: animated:» и «userTrackingMode». Оба являются новыми в iOS5. У меня была аналогичная проблема, и я исправил ее, установив MKUserTrackingModeFollow в функции setUserTrackingMode. Я думаю, что режим отслеживания по умолчанию — MKUserTrackingModeNone и вызывает MapView:didUpdateUserLocation только один раз.

Если ваша проблема в том, что MapView: didUpdateUserLocation никогда не вызывается, тогда взгляните на параметры в новом xcode, прямо под выводами консоли есть значок, похожий на значок gps на ipad, который позволяет вам имитировать местоположение.

Ответ №3:

Я знаю, что это старый поток. Я все равно отвечу, это может помочь и другим.

У меня была аналогичная проблема с iOS 6. Который я смог решить, установив для делегата mapview значение self .

Вот так:

 [mapView setDelegate:self];
  

Убедитесь, что ваш ViewController.h имеет MKMapViewDelegate в соответствии со строками:

 @interface ViewController : UIViewController <CLLocationManagerDelegate, MKMapViewDelegate>