2016-11-07 15 views
0

Objective C를 사용하여 iOS 9.0 이상용 앱을 개발 중입니다.MKCircleOverlay를 MKMapView에 추가 할 때 인식 할 수없는 선택자 [MKCircle pointCount]

이 응용 프로그램에는 MKMapView 개체가있는보기 컨트롤러가 포함되어 있습니다. 뷰 컨트롤러는 맵 뷰 대리자입니다.

viewWillAppear : animated의 구현에 MKCircle 오버레이를 추가하는 데 문제가 있습니다.

addOverlay:level: 메서드를 사용해도 문제가 해결되지 않습니다.

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

특히이 앱이 바로지도보기 원 오버레이의 일부를 보여주기 위해 시도로 충돌한다 : 같은

구현 보인다.

지도보기에서 다각형 오버레이와 다양한 핀 주석을 성공적으로 렌더링합니다. 오류 메시지 세부 사항은 다음과 같습니다

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 

실험은, 내가 원 오버레이가 화면에 표시되지 않는지도의 일부에있는 경우 응용 프로그램을 충돌없이 추가 될 수 있음을 발견했다. 사용자가 원이있는 부분으로 이동하면이 충돌이 발생합니다.

iOS 10.1 및 iOS 9.0 모두에서 시뮬레이터를 사용할 때 오류가 발생합니다.

왜 이런 일이 발생했는지에 대한 생각은 크게 감사하겠습니다.

+0

반경이 '1000000' 킬로미터로 약간 과장된 것 같습니다. 반경을 인간의 눈금 (예 : 10-100 km?)으로 만들면 여전히 동일한 문제가 발생합니까 –

+0

반경이 미터 단위 인 것으로 알고 있습니다. 나는 1m와 주어진 값 사이의 반지름으로 시도했지만 아무도 작동하지 않습니다. https://developer.apple.com/reference/mapkit/mkcircle/1411076-circlewithcentercoordinate –

+0

그래, 네 말이 맞아 ... 그들은 미터로되어있다. (내가 내 의견을 타이핑했을 때 나는 무엇을보고 있는지 확실하지 않다.) 찾고자하는 선택자는 ['MKMultiPoint'] (https://developer.apple.com/reference/mapkit/mkmultipoint/1452179-pointcount)에서옵니다. –

답변

0

모두에게 감사드립니다.

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

있었어야 : 올바른 서명 방법의 또 다른 구현이 있었기 때문에

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

이 넓은 문제를 일으키지 않는 한 결국 문제는 잘못된 방법 서명이었다 코드의 다른 부분. 이 방법은 MKCircle을 MKPolygon으로 처리하려고 시도 했으므로 pointCount 문제가 발생했습니다.