Я работаю над простым приложением iOS, которое извлекает GeoJSON с сервера и отображает его на карте. Все работает, кроме последней части. Я извлекаю GeoJSON, разбираю его для создания MKPolyline, передаю строку моему представлению (это делегат карты), а затем добавляю строку в свой mapView, но она не отображается. Я не понимаю, что может быть не так.MKPolyline не отображается на карте
У меня есть класс networking
, который извлекает данные с сервера, а мой контроллер представления - его делегат. Он получает такую строку:
-(void) receiveRoutePolyline:(MKPolyline *)routeLine {
NSLog(@"Received line");
NSLog(@"%@", self.mapView.delegate);
NSLog(@"%@", self);
self.routeLine = routeLine;
if (self.routeLine == nil) {
NSLog(@"Nil duh!");
}
NSLog(@"%lu", (unsigned long)[self.routeLine pointCount]);
[self.mapView addOverlay:self.routeLine level:MKOverlayLevelAboveLabels];
NSLog(@"Set line on map");
}
Как вы можете видеть, я печатаю информацию, чтобы найти ошибки. Вот выход из функции:
2016-04-28 12:09:40.472 SinTraficoRouteAPIDemo[43189:1400965] Received line
2016-04-28 12:09:40.473 SinTraficoRouteAPIDemo[43189:1400965] <MapViewController: 0x78f37a90>
2016-04-28 12:09:40.474 SinTraficoRouteAPIDemo[43189:1400965] <MapViewController: 0x78f37a90>
2016-04-28 12:09:40.475 SinTraficoRouteAPIDemo[43189:1400965] 121
2016-04-28 12:09:40.475 SinTraficoRouteAPIDemo[43189:1400965] Set line on map
мнение контроллер правильно установлен в качестве делегата MAPview, однако, метод рендеринга:
- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {
NSLog(@"hi");
if ([overlay isKindOfClass:[MKPolyline class]]) {
MKPolyline *route = overlay;
MKPolylineRenderer *routeRenderer = [[MKPolylineRenderer alloc] initWithPolyline:route];
routeRenderer.strokeColor = [UIColor blueColor];
routeRenderer.lineWidth = 10;
return routeRenderer;
}
else {
return nil;
}
}
никогда не регистрирует «привет» в консоли! Я даже попробовал добавить устаревший метод
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay {
MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay];
polylineView.strokeColor = [UIColor redColor];
polylineView.lineWidth = 10;
return polylineView;
}
посмотреть, возможно, это сработает, но не повезло. Любая помощь приветствуется, спасибо.
EDIT: Посмотреть контроллер декларации
@interface MapViewController : UIViewController <MKMapViewDelegate, OptionsDelegate, RouteNetworkDelegate>
сделал u объявляет MKMapViewDelegate? –
@TejaNandamuri Да, я добавил объявление на свой пост. – gamda
- это карта, созданная в раскадровке? Если это так, установите делегат в раскадровку. –