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...
И это должно начать отслеживать местоположение пользователя и вызывать методы делегата.