2016-11-07 4 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 

試すは、I円オーバーレイは、それが画面上に表示されていないマップの一部である場合、アプリケーションをクラッシュすることなく加えることができることを見出しました。ユーザーが円のある部分に移動するとすぐに、このクラッシュが発生します。

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 *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay 

これは、より広い問題を引き起こしていませんでした:れている必要があり

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

コードの他の場所その方法は、MKCircleをMKPolygonとして扱おうとしていたため、pointCountの問題が引き起こされていました。

関連する問題