2016-11-07 4 views
0

Ich verwende Objective C, um eine App für iOS 9.0 und höher zu entwickeln.Unbekannter Selektor [MKCircle pointCount] beim Hinzufügen von MKCircleOverlay zu MKMapView

Die App enthält einen View-Controller mit einem MKMapView-Objekt. Der Ansichtscontroller ist der Delegat für die Kartenansicht.

Ich habe Probleme beim Hinzufügen eines MKCircle Overlay in der Implementierung von viewWillAppear: animiert.

Die Verwendung der addOverlay:level: Methode löst das Problem nicht.

Die Umsetzung wie folgt aussieht:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self.mapView setDelegate:self]; 
    [self.mapView setZoomEnabled:YES]; 
    [self.mapView setScrollEnabled:YES]; 
} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.locationCircle = [MKCircle circleWithCenterCoordinate:self.locationPin.coordinate radius:1000000.0]; 
    [self.mapView addOverlay:self.locationCircle]; 
} 

- (MKOverlayRenderer *)rendererForOverlay:(id<MKOverlay>)overlay { 
    if ([overlay isKindOfClass:[MKCircle class]]) { 
     MKCircleRenderer *renderer = [[MKCircleRenderer alloc] initWithCircle:(MKCircle *)overlay]; 
     renderer.fillColor = [[UIColor yellowColor] colorWithAlphaComponent:0.25]; 
     return renderer; 
    } else { 
     return [self.superclass rendererForOverlay:overlay]; 
    } 
} 

Insbesondere wird die App, sobald die Kartenansicht zu zeigen versucht, einen Teil des Kreises Overlay abstürzt.

Die App kann Polygon-Überlagerungen und verschiedene Pin-Anmerkungen in der Kartenansicht erfolgreich darstellen. Die Fehlermeldung Details sind:

2016-11-07 12:35:21.643 [MKCircle pointCount]: unrecognized selector sent to instance 0x6000004902c0 
2016-11-07 12:35:21.645 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MKCircle pointCount]: unrecognized selector sent to instance 0x6000004902c0' 
*** First throw call stack: 
(
0 CoreFoundation      0x000000010cdc334b __exceptionPreprocess + 171 
1 libobjc.A.dylib      0x000000010c82421e objc_exception_throw + 48 
2 CoreFoundation      0x000000010ce32f34 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 
3 CoreFoundation      0x000000010cd48c15 ___forwarding___ + 1013 
4 CoreFoundation      0x000000010cd48798 _CF_forwarding_prep_0 + 120 
5 MapKit        0x0000000109af40a3 CreatePathForPolygon.38297 + 57 
6 MapKit        0x0000000109af3e4c -[MKPolygonRenderer createPath] + 128 
7 MapKit        0x0000000109aeefda -[MKOverlayPathRenderer drawMapRect:zoomScale:inContext:] + 72 
8 MapKit        0x0000000109aefd89 __47-[MKOverlayRenderer overlay:drawKey:inContext:]_block_invoke + 671 
9 MapKit        0x0000000109aefdda _worldsForBounds.37697 + 58 
10 MapKit        0x0000000109aef99f -[MKOverlayRenderer overlay:drawKey:inContext:] + 224 
11 VectorKit       0x00000001170e0534 __40-[VKRasterOverlayTileSource _queueDraw:]_block_invoke + 484 
12 libdispatch.dylib     0x000000010de3a980 _dispatch_call_block_and_release + 12 
13 libdispatch.dylib     0x000000010de640cd _dispatch_client_callout + 8 
14 libdispatch.dylib     0x000000010de43499 _dispatch_queue_override_invoke + 1733 
15 libdispatch.dylib     0x000000010de453b7 _dispatch_root_queue_drain + 720 
16 libdispatch.dylib     0x000000010de4508b _dispatch_worker_thread3 + 123 
17 libsystem_pthread.dylib    0x000000010e20d4de _pthread_wqthread + 1129 
18 libsystem_pthread.dylib    0x000000010e20b341 start_wqthread + 13 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 

Experimenting, die ich gefunden habe, dass der Kreis Overlay ohne Absturz der App hinzugefügt werden kann, wenn sie in einem Teil der Karte ist, die nicht auf dem Bildschirm angezeigt wird. Sobald der Benutzer zu dem Teil der Karte schwenkt, auf dem sich der Kreis befindet, tritt dieser Absturz auf.

Der Fehler tritt auf, wenn der Simulator mit iOS 10.1 und iOS 9.0 verwendet wird.

Alle Gedanken darüber, warum dies geschieht, werden sehr geschätzt.

+0

ein Radius von '1000000' Kilometern scheint ein wenig übertrieben. haben Sie immer noch die gleichen Probleme, wenn Sie den Radius menschlicher Maßstab (z. B. 10-100 km?) machen –

+0

Ich verstand, dass der Radius in Metern war. Ich habe versucht, mit Radien zwischen 1m und dem angegebenen Wert und keiner von ihnen funktioniert. Siehe https://developer.apple.com/reference/mapkit/mkcircle/1411076-circlewithcentercoordinate –

+0

Ja, du hast Recht ... sie sind in Metern (nicht sicher, was ich sah, als ich meinen Kommentar eintippte). Der Selektor, nach dem gesucht wird, stammt aus ['MKMultiPoint'] (https://developer.apple.com/reference/mapkit/mkmultipoint/1452179-pointcount). –

Antwort

0

Danke allen für die Eingabe. Das Problem war am Ende wegen einer falschen Methode Unterschrift:

- (MKOverlayRenderer *)rendererForOverlay:(id<MKOverlay>)overlay 

, das hätte sein sollen:

- (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay 

Dies wurde nicht breite Probleme verursacht, weil es eine andere Implementierung des Verfahrens mit der korrekten Signatur war woanders im Code. Diese Methode hat versucht, den MKCircle als MKPolygon zu behandeln und somit das pointCount-Problem ausgelöst.

Verwandte Themen