2016-04-28 16 views
0

Ich arbeite an einer einfachen iOS-App, die GeoJSON von einem Server abruft und in einer Kartenansicht anzeigt. Alles funktioniert bis auf den letzten Teil. Ich erhalte das GeoJSON, analysiere es, um eine MKPolyline zu erstellen, gebe die Zeile meiner Sicht (die der Delegat der Karte ist), und dann füge ich die Zeile meiner mapView hinzu, aber sie wird nicht angezeigt. Ich habe keine Ideen, was falsch laufen könnte.MKPolyline wird nicht in der Kartenansicht angezeigt

Ich habe eine networking Klasse, die Daten vom Server abruft, und mein View-Controller ist ihr Stellvertreter. Es empfängt die Zeile wie folgt:

-(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"); 
} 

Wie Sie sehen können, habe ich Informationen gedruckt, um irgendwelche Fehler zu finden. Hier ist die Ausgabe der Funktion:

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 

Die View-Controller richtig eingestellt ist als die mapView des Delegierten jedoch das Verfahren für die Darstellung:

- (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; 
    } 
} 

nie anmeldet „hallo“ auf der Konsole! Ich habe sogar versucht, die veraltete Methode

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id<MKOverlay>)overlay { 
    MKPolylineView *polylineView = [[MKPolylineView alloc] initWithPolyline:overlay]; 
    polylineView.strokeColor = [UIColor redColor]; 
    polylineView.lineWidth = 10; 
    return polylineView; 
} 

zu sehen, ob es vielleicht funktionieren würde, aber kein Glück. Jede Hilfe wird geschätzt, danke.

EDIT: View-Controller-Deklaration

@interface MapViewController : UIViewController <MKMapViewDelegate, OptionsDelegate, RouteNetworkDelegate> 
+0

hast du MKMapViewDelegate deklariert? –

+0

@TejaNandamuri Ja, ich habe die Erklärung zu meinem Beitrag hinzugefügt. – gamda

+0

ist die Kartenansicht im Storyboard erstellt? Ist dies der Fall, legen Sie den Delegaten ebenfalls im Storyboard fest. –

Antwort

0

Dieser Code fein gearbeitet. Die Linie wurde auf der Karte korrekt gezeichnet, das Problem war der Code, der die Koordinaten analysierte und die Linie erstellte. Es stellte die Breite und Länge nach hinten, so dass die Linie irgendwo anders auf der Welt war, unsichtbar für meine Zoomstufe.