MKMapView viewForAnnotation не вызывать в iOS 8

Методы делегата MKMapView, не вызываемые в iOS 8. В viewDidLoad:

CGRect mapViewFrame = CGRectMake(0.0, 129.0, 320.0, 419.0);
    _mapView = [[MKMapView alloc] initWithFrame:mapViewFrame];
    [_mapView setMapType:MKMapTypeStandard];
    [_mapView setDelegate:self];
    [_mapView setShowsUserLocation:YES];

Эти методы никогда не называются:

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

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

В предыдущих версиях iOS 8 все работало.

2 ответа

Вы пытались добавить другие аннотации (не местоположение пользователя) и посмотреть, будут ли вызваны методы делегата? Это поможет вам решить проблему

Я думаю, что поиск местоположения пользователя изменился в iOS 8. Теперь вам нужно использовать авторизацию CLLocationManager для отслеживания местоположения пользователя. mapView.showsUserLocation = ДА больше не достаточно.

Вам нужен экземпляр CLLocationManager:

@property(nonatomic, strong) CLLocationManager *locationManager;

В viewDidLoad

self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
    [self.locationManager requestWhenInUseAuthorization];
}
[self.locationManager startUpdatingLocation];
// your mapKit stuff...

И это должно начать отслеживать местоположение пользователя и вызывать методы делегата.

Другие вопросы по тегам