2013-09-23 11 views
6

Meine Anwendung auf iOS6 fein gearbeitet, aber es auf iOS 7 wegen schlechten Zugang abstürzt, wenn ich zu MKMapView.My Code hinzufügen Overlay wird wie folgtMKPolyline Overlay zu MKMapView Hinzufügen stürzt Anwendung

MKPolyline *polyline = [[MKPolyline alloc] init]; 
    polyline = [MKPolyline polylineWithCoordinates:coordinates count:numberOfSteps]; 
    [directionMap addOverlay:polyline]; 

enter image description here

Dies ist das Crash-Protokoll (LLDB) bt *

thread #51: tid = 0x1cc5, 0x38755f8c libdispatch.dylib`dispatch_retain$VARIANT$mp + 8, stop reason = EXC_BAD_ACCESS (code=1, address=0x0) 
    frame #0: 0x38755f8c libdispatch.dylib`dispatch_retain$VARIANT$mp + 8 
    frame #1: 0x3598dbc8 VectorKit`-[VKRasterOverlayTileSource init] + 176 
    frame #2: 0x358cfd24 VectorKit`-[VKMapModel _rasterOverlayTileSourceForLevel:] + 308 
    frame #3: 0x358d0226 VectorKit`-[VKMapModel addRasterOverlay:] + 46 
    frame #4: 0x2f068dfe MapKit`-[MKOverlayContainerView _insertDrawable:forOverlay:atIndex:level:] + 1010 
    frame #5: 0x2f06752e MapKit`-[MKOverlayContainerView _configureAndAddDrawable:forOverlay:level:] + 326 
    frame #6: 0x2f0676ac MapKit`-[MKOverlayContainerView _considerAddingDrawable:inAddRect:level:] + 372 
    frame #7: 0x2f067cce MapKit`-[MKOverlayContainerView addOverlay:level:] + 246 
    frame #8: 0x001394c8 Falcon`-[GetDirectionVC showRouteFrom:to:](self=0x19742820, _cmd=0x001fa466, f=CLLocationCoordinate2D at 0x04f9ec2c, t=CLLocationCoordinate2D at 0x04f9ec1c) + 956 at GetDirectionVC.m:226 
    frame #9: 0x001390ee Falcon`-[GetDirectionVC loadLocations](self=0x19742820, _cmd=0x001fa458) + 1314 at GetDirectionVC.m:173 
    frame #10: 0x2e876e26 Foundation`__NSThread__main__ + 1062 
    frame #11: 0x38891c1c libsystem_pthread.dylib`_pthread_body + 140 
    frame #12: 0x38891b8e libsystem_pthread.dylib`_pthread_start + 102 

(LLDB)

+0

Bitte senden Sie das Fehlerprotokoll. –

+0

Ich habe Frage mit dem Crash-Protokoll bearbeitet bitte überprüfen Sie es.Vielen Dank –

+0

Nun, in der Dokumentation ist nichts für MKpolyline geändert, aber ViewForOverlay Methode wurde in iOS7.0 veraltet. Versuchen Sie es mit - (MKOverlayRenderer *) rendererForOverlay: (id < MKOverlay >) Overlay statt ViewForOverlay-Methode. –

Antwort

18

Ich hatte das gleiche Problem, die Stack-Trace sieht für mich irreführend aus. Mein Bugfix ist das Overlay auf dem Haupt-Thread explizit hinzufügen:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [mapView addOverlay:myRouteLine]; 
}); 

oder wenn Sie die neuen MKOverlayRenderer verwenden mögen:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [mapView addOverlay:myRouteLine level:MKOverlayLevelAboveRoads]; 
}); 

In meinem Fall, ich bin das Herunterladen asynchron einige Daten Generieren Sie Polylines, erstellen Sie MKOverlayViews/MKOverlayRenderes (half nicht, den veralteten Code zu ersetzen), und fügen Sie der Karte das Overlay hinzu.

+1

Danke !! Ich habe seit Tagen nach einer Lösung gesucht, wie Sie sagten, stürzt die Methode auf Hintergrundthreads in iOS 7 ab. – Niralp

+0

Splendid! Danke Roger – dijipiji

+0

Vielen Dank Roger. – kalan

1

Verwenden folgenden Wenn Sie Polylinien in anderen Thread als Haupt-Thread erstellen:

[self performSelectorOnMainThread:@selector(addPolyLineToMap:) withObject:polyline waitUntilDone:NO]; 

-(void)addPolyLineToMap:(MKPolyline*)apolyline{ 
    [mapview addOverlay:apolyline]; 
} 
Verwandte Themen