В iOS 5 MapKit вылетает из-за наложений при масштабировании / панорамировании

Я создал приложение, которое предназначено для отображения некоторых наложений. Наложения представляют собой многоугольники с количеством точек до 10000 во внешнем кольце. Но, похоже, проблема не в большом количестве баллов. В последние несколько дней я продолжал упрощать свое приложение, чтобы найти простой View, содержащий MapView. Представление загружается из xib (с подключенными выходами и делегатом). Наложение создается в методе - (void) mapView: (MKMapView *) mapView regionDidChangeAnimated: (BOOL) анимируется и добавляется в mapView.

Демонстрация (доступная здесь https://github.com/nebucaz/mapkit ) показывает MapView и добавляет красный треугольник всякий раз, когда карта увеличивается / уменьшается или панорамируется. При игре с масштабированием и панорамированием (интенсивно и быстро) MapView приложение вылетает. Обозначить симулятор несложно, на устройстве намного сложнее, хотя это возможно (могу предоставить аварийный журнал).

Есть две демонстрации: MapCrash и MapCrashStatic. Первый создает несколько многоугольников вокруг карты в зависимости от того, где вы панорамируете / масштабируете.У второго есть только один статический многоугольник, который создается в - (void) viewDidLoad, а затем добавляется при каждом вызове mapView regionDidChangeAnimated

Приложение всегда вылетает со следующей трассировкой:

Attaching to process 8745.
MapCrash(8745) malloc: protecting edges
[Switching to process 8745 thread 0x1820b]
[Switching to process 8745 thread 0x1820b]
(gdb) backtrace
#0  0x00000000 in ?? ()
#1  0x00e81a60 in CG::Path::apply_transform ()
#2  0x00ed741c in CGPathCreateMutableCopyByTransformingPath ()
#3  0x00f50d23 in CGContextAddPath ()
#4  0x000f11dc in MKRoadWidthAtZoomScale ()
#5  0x000ee498 in MKMapRectRemainder ()
#6  0x000fab01 in MKTilesRequireGoogleLegalNotices ()
#7  0x02723c17 in -[CALayer drawInContext:] ()
#8  0x027407e3 in tiled_layer_render ()
#9  0x0265b127 in CAImageProviderThread ()
#10 0x01eb04e6 in _dispatch_worker_thread2 ()
#11 0x98f44b24 in _pthread_wqthread ()
#12 0x98f466fe in start_wqthread ()
(gdb) 

Трассировка всегда одинакова, это вылетает в том же месте в коде библиотеки. Я проанализировал с помощью инструментов (зомби, утечки, выделения), а также провел несколько тестов с чрезмерно удерживаемыми объектами. Я предположил, что это проблема с памятью, но я еще не смог запустить Malloc Guard. Авария может быть воспроизведена на нескольких машинах - даже несмотря на это, я просто переустановил Xcode-tools.

Другие сообщения на stackoverflow.com также касаются внезапного сбоя в MapKit, но либо не предлагают прямого решения моей проблемы, либо имеют дело с делегированием и другими проблемами перехода между представлениями или запуском / остановкой приложения. В моих проектах ARC отключен.

Я отслеживаю этот сбой уже больше недели, все еще предполагая, что я неверно истолковал демонстрацию KMLViewer (Apple) или сделал что-то неправильно (Спасибо другим разработчикам iOS в моем районе! )

Тем не менее, я был бы признателен за ваши предложения и помощь в этом вопросе.

9
задан Community 23 May 2017 в 10:28
поделиться