Я использую Objective C для разработки приложения для iOS 9.0 и более поздних версий.Непризнанный селектор [MKCircle pointCount] при добавлении MKCircleOverlay в MKMapView
Приложение включает в себя контроллер вида с объектом MKMapView. Контроллер представления является делегатом представления карты.
У меня возникли проблемы с добавлением наложения MKCircle в реализацию viewWillAppear: анимированный.
Использование метода 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.
Любые мысли о том, почему это происходит, будут очень признательны.
радиус «1000000 километров» кажется немного чрезмерным. у вас все еще есть те же проблемы, если вы делаете радиус более человеческого масштаба (например, 10-100 км?) –
Я понял, что радиус был в метрах. Я пробовал хотя с радиусом между 1 м и значением, и никто из них не работает. См. Https://developer.apple.com/reference/mapkit/mkcircle/1411076-circlewithcentercoordinate –
Да, вы правы ... они в метрах (не уверен, что я смотрел, когда я набрал свой комментарий). Селектор, который он ищет, исходит из ['MKMultiPoint'] (https://developer.apple.com/reference/mapkit/mkmultipoint/1452179-pointcount). –