#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>