Я создал приложение, которое предназначено для отображения некоторых наложений. Наложения представляют собой многоугольники с количеством точек до 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 в моем районе! )
Тем не менее, я был бы признателен за ваши предложения и помощь в этом вопросе.