iOS 5 MapKit se bloquea con superposiciones cuando zoom / pan

Tengo una aplicación que está diseñada para mostrar algunas superposiciones. Las superposiciones están en forma de polígonos con hasta 10000 puntos en el anillo exterior. Pero el alto número de puntos parece no ser el problema aquí. En los últimos días seguí simplificando mi aplicación solo para encontrarme con una simple Vista que contiene un MapView. La vista se carga desde un xib (con salidas y delegado conectado). La superposition se crea dentro del método – (vacío) mapView: (MKMapView *) mapView regionDidChangeAnimated: (BOOL) animado y agregado a mapView.

La demostración (que está disponible aquí https://github.com/nebucaz/mapkit ) muestra un MapView y agrega un triángulo rojo cada vez que se amplía o se amplía el map. Al reproducir zoom y paneo (intenso y rápido) de MapView, la aplicación se bloquea. Es fácil de usar el simulador, en el dispositivo es mucho más difícil, incluso si es posible (puedo proporcionar un logging de falla).

Hay dos demos: MapCrash y MapCrashStatic. El primero crea múltiples polígonos alnetworkingedor del map según dónde se desplace / zoom. El segundo solo tiene un único polígono estático que se crea en – (void) viewDidLoad y luego se agrega en cada llamada de mapView regionDidChangeAnimated

La aplicación siempre falla con la siguiente function inversa:

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) 

Backtrace siempre es el mismo, se cuelga en el mismo punto en el código de la biblioteca. Analicé con instrumentos (zombies, fugas, asignaciones) y también hice algunas testings con objects retenidos. Supuse que era un problema de memory, pero aún no era capaz de poner en marcha Malloc Guard. El locking se puede reproducir en varias máquinas, incluso aunque sea difícil, simplemente reinstalé las herramientas Xcode.

Otras publicaciones en stackoverflow.com también se ocupan de lockings repentinos en MapKit, pero no ofrecen ninguna solución directa para mi problema o tuvieron que lidiar con el delegado y otros problemas de transición de vista o de inicio / finalización de la aplicación. ARC está apagado en mis proyectos.

  • Navigation y MapKit hace que la aplicación falle
  • IOS – Mapkit crash – ¿Es un error en xcode 4.2 y Automatic Counting Reference (ARC)?
  • MKMapView crash (Anotaciones)
  • Necesito ayuda con un locking de MKMapView (Delegado)

Cazo este locking desde hace más de una semana, suponiendo que malinterpreté KMLViewer Demo (Apple) o haciendo algo mal (¡Créditos para otros desarrolladores de iOS en mi vecindario!)

Sin embargo, agradecería sus sugerencias y ayuda en este asunto.

Probablemente ya pensaste en esto, pero he visto numerosos bloqueadores de aspecto distinto de MapKit, todos derivados de no descartar al delegado. Solo asegúrate de configurar el delegado de la vista del map en cero antes de lanzarlo.

Además, he visto a varios desarrolladores inclinados a usar performSelector: afterDelay: en su vista de map. Eso está bien, siempre y cuando coloque una llamada cancelperform en los lugares correctos también.

elimine el método zoomToPolyLine y use mapViewDidUpdateLocation para hacer zoom en poly line.