2010-09-20 17 views
6

Tengo una aplicación que muestra un bloqueo intermitente. Los registros de fallas muestran un rastro de pila que es difícil de descifrar, por lo que espero que alguien más haya visto esto y pueda orientarme en la dirección correcta.MKReverseGeocoder causando EXC_BAD_ACCESS?

Básicamente, la aplicación hace una solicitud de geocodificación inversa al inicio para mostrar la ubicación del usuario en una etiqueta. Además, hago otra solicitud de geocodificación inversa para una llamada API específica.

Lo que está sucediendo es que a veces este MKReverseGeocoder tarda mucho tiempo en volver. Eventualmente, supongo que obtendré una devolución de llamada fallida, y algunas veces lo hago, pero puede ser minutos antes de que esto suceda.

Dado que la llamada API también está emitiendo otra solicitud MKReverseGeocoder, creo que tal vez haya un problema con varias llamadas concurrentes?

Aquí es mi StackTrace:

Program received signal: “EXC_BAD_ACCESS”. 
(gdb) backtrace 
#0 0x30c237a0 in -[MKPlacemark _mapkit_cache_heapTime]() 
#1 0x30bffe60 in compareTimes() 
#2 0x32403b24 in CFBinaryHeapAddValue() 
#3 0x30c0030c in -[MKCache setObject:forKey:]() 
#4 0x30c2aa48 in -[MKReverseGeocodeCache addPlacemark:forCoordinate:]() 
#5 0x30c2251c in -[MKReverseGeocoder requester:didReceiveResponse:forRequest:]() 
#6 0x3388cc1c in -[PBRequester _tryParseData]() 
#7 0x3388b288 in -[PBRequester connection:didReceiveData:]() 
#8 0x337490ce in -[NSURLConnection(NSURLConnectionReallyInternal) sendDidReceiveData:originalLength:]() 
#9 0x33748ff0 in _NSURLConnectionDidReceiveData() 
#10 0x30899ff8 in URLConnectionClient::_clientDidReceiveData() 
#11 0x3088ca3e in URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload() 
#12 0x3088cb40 in URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload() 
#13 0x3088cb40 in URLConnectionClient::ClientConnectionEventQueue::processAllEventsAndConsumePayload() 
#14 0x3088c8ce in URLConnectionClient::processEvents() 
#15 0x3088c878 in URLConnection::multiplexerClientPerform() 
#16 0x3088c7f8 in MultiplexerSource::perform() 
#17 0x3088c798 in MultiplexerSource::_perform() 
#18 0x323f4f48 in CFRunLoopRunSpecific() 
#19 0x323f4c1e in CFRunLoopRunInMode() 
#20 0x335051c8 in GSEventRunModal() 
#21 0x324a6c30 in -[UIApplication _run]() 
#22 0x324a5230 in UIApplicationMain() 
#23 0x000024f8 in main (argc=1, argv=0x2ffff504) at /Users/ben/projects/ABC/iphone/ABC/main.m:14 

Puesto que no parezca que está llamando incluso mi método de devolución de llamada que no saben dónde buscar para este problema EXC_BAD_ACCESS. Mi delegado ciertamente todavía está activo (estoy mirando al Controlador de Vista que lanzó la solicitud).

1 última nota: Hasta ahora solo ha aparecido en iOS 3.1.3. Aún no lo he visto para iOS 4.0.u

+2

¿Puedes publicar el código donde estás haciendo la geocodificación inversa? podría ayudar a señalar su problema – Daniel

+0

Este rastro de pila en particular muestra el que ocurre inmediatamente cuando se inicia la aplicación. Otra pantalla tiene un botón que llama a una API remota que, de antemano, también requiere otro RGC. Esto no siempre falla. Solo ha sucedido una vez de aproximadamente 6 pruebas hoy. –

+0

He encontrado exactamente el mismo problema. Yo también estoy usando 2 instancias separadas de MKReverseGeocoder en hilos separados. Sin embargo, este es mi requisito. Todo lo que has mencionado aplica exactamente lo mismo para mí también. Aparece en 3.0 pero no en 4.0+. ¿Cómo has resuelto este problema? Sin embargo, me gustaría agregar que, cuando estaba depurando para encontrar la respuesta utilizando puntos de interrupción cuando correspondía, descubrí que este bloqueo no se produjo. Esto de hecho dice que el bloqueo se debe a cierta concurrencia. Sin embargo, ¿cómo resolvió este problema en iOS 3.0? –

Respuesta

0

Trate de usar instrumento Zombis del perfil Xcode. Esto te ayudará a encontrar qué objeto de memoria está causando el EXC_BAD_ACCESS.

+0

No recuerdo cuál fue el resultado final (esto fue hace 2 años) pero activar Zombies ayudó a encontrar el problema. Marcando esto como correcto. –