2011-04-13 26 views
6

Me da un bloqueo que, para mí, parece como si fuera un error en la forma en que Apple está manejando el mensaje goToDefaultLocation de MKMapView. Ese mensaje a su vez llama al [ALCityManager localeWithCode:], que llama al [NSLocale componentsFromLocaleIdentifier:] que llama al CFLocaleCreateComponentsFromLocaleIdentifier que llama al CFStringGetLength y se produce el bloqueo.iOS se bloquea en CFStringGetLength en CoreFoundation

¿Alguien puede ayudarme a orientarme en la corrección del error, si es mi código el que está causando esto, o, ayudándome a encontrar una solución si, de hecho, esto es un error en el código de Apple (poco probable ??).

registro de bloqueo a continuación:

 

Incident Identifier: 84198BB6-45BD-493B-955F-75CCB5246DDD 
CrashReporter Key: 7dbf53bf1f1a3635d7c3c49e726dedc609ed9f3a 
Hardware Model:  iPhone3,1 
Process:   MyApp [340] 
Path:   /var/mobile/Applications/DCE9A5A1-8E24-4D4F-A1ED-9855C6CA1742/MyApp.app/MyApp 
Identifier:  MyApp 
Version:   ??? (???) 
Code Type:  ARM (Native) 
Parent Process: launchd [1] 

Date/Time:  2011-03-25 10:36:06.382 -0700 
OS Version:  iPhone OS 4.3 (8F190) 
Report Version: 104 

Exception Type: EXC_BAD_ACCESS (SIGBUS) 
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000000 
Crashed Thread: 0 

Thread 0 name: Dispatch queue: com.apple.main-thread 
Thread 0 Crashed: 
0 CoreFoundation     0x00009a66 CFStringGetLength + 6 
1 CoreFoundation     0x0002f994 CFLocaleCreateComponentsFromLocaleIdentifier + 60 
2 CoreFoundation     0x000483b8 +[NSLocale componentsFromLocaleIdentifier:] + 12 
3 AppSupport      0x00016eee -[ALCityManager localeWithCode:] + 130 
4 MapKit       0x00038488 -[MKMapView goToDefaultLocation] + 80 
5 Foundation      0x000907c6 __NSFireTimer + 130 
6 CoreFoundation     0x00075a40 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8 
7 CoreFoundation     0x00077ec4 __CFRunLoopDoTimer + 844 
8 CoreFoundation     0x0007883e __CFRunLoopRun + 1082 
9 CoreFoundation     0x00008ebc CFRunLoopRunSpecific + 224 
10 CoreFoundation     0x00008dc4 CFRunLoopRunInMode + 52 
11 GraphicsServices    0x00004418 GSEventRunModal + 108 
12 GraphicsServices    0x000044c4 GSEventRun + 56 
13 UIKit       0x0002ed62 -[UIApplication _run] + 398 
14 UIKit       0x0002c800 UIApplicationMain + 664 
15 MyApp        0x000023f0 main (main.m:34) 
16 MyApp        0x00002370 start + 44 
+1

Es difícil saber si hay un error en su código a menos que publique su código. goToDefaultLocation no es un método público documentado de MKMapView. ¿Qué estás haciendo realmente en tu código cuando ocurre este bloqueo? – CharlieMezak

+0

Nada -> el bloqueo ocurre al inicio. – fatfreddyscat

+1

alguna noticia sobre este? –

Respuesta

2

me dieron exactamente los mismos informes de fallos, sólo que con IOS 4.3/4.3.1 y iPhone 3GS/4 (ARMv7)

creo que es un insecto de Apple, iOS4.3 tiene otras feas regresiones en relación MapKit. (accidente como el MKReverseGeocoder liberación temprana ...)

  1. Una solución fácil sería para anular -[MKMapView goToDefaultLocation] pero con el riesgo de un rechazo de Apple, ya que es una API privada ... (Rechazado por una bug solución ... lo sé ... la gente es mala)

  2. Otra solución sería analizar (inversa ...)CFLocaleCreateComponentsFromLocaleIdentifier y componentsFromLocaleIdentifier: y [ALCityManager localeWithCode:] para entender cómo se puede accidente, siendo llamado con una nil locale identificador de aplicación y quizás corregir la configuración de la aplicación mediante programación, ya que parece que el error proviene de determinar la configuración regional del usuario desde la configuración del dispositivo (o peor, desde la ciudad/geolocalización) ... o al menos advierte al usuario que su configuración regional puede causar problemas ... Algo que simplemente no puedo (o quiero) hacer, no ser capaz de reproducir ese error.

+0

¡gracias! esto está en la línea de lo que estoy pensando también. * afortunadamente *, nuestro cliente que está viendo el bloqueo va a entrar a la oficina con su dispositivo; con suerte puedo arreglarlo/resolverlo con el dispositivo bloqueado en la mano y luego comentar sobre la corrección (probablemente, solución alternativa). – fatfreddyscat

+0

contento de escuchar eso, asegúrese de 1. comprobar su configuración regional en tiempo de ejecución, probablemente '- [NSLocale currentLocale]' 2. intente con gdb a 'fb - [ALCityManager localeWithCode:]' y sus * amigos * en stacktrace al punto de corte * * antes de ** el bloqueo y analizar registros y tal ... Tal vez paso a paso si puedes leer algún código de ensamblaje de brazo ... ¡Espero que encuentres una solución y compartas tu experiencia! –

+0

Perdón por olvidar actualizar esto. Tenías razón, Vincent y después de un par de vueltas con el apoyo de Apple, es, de hecho, un problema de Apple. ¡Muchas gracias por su ayuda! – fatfreddyscat

1

bien su código de excepción es EXC_BAD_ACCESS. En general, esto es un error de gestión de memoria (es decir, un poco de código intentó acceder a un objeto que ya había sido liberado/desasignado).

Es posible pero poco probable que esto sea un error en el código Apple/framework. Es más probable que en algún lugar de tu código estés liberando algo o aferrándote a una instancia de objeto liberado automáticamente o accediendo a algo a lo que no se debe acceder.

Dado que el bloqueo ocurrió en MapKit, recomendaría buscar en el código relacionado con el mapa las posibles fuentes de este bloqueo. Tenga en cuenta que MapKit puede ser un poco temperamental; He visto bloqueos en casos como el intento de acceder a la ubicación actual del LocationManager cuando el usuario tiene desactivados los servicios de ubicación. Esperaría que un caso así fallara (por ejemplo, al devolver una ubicación nil), pero no para bloquear la aplicación.

+0

Sí, me doy cuenta de lo que es 'EXC_BAD_ACCESS' y he intentado buscar en todas mis referencias de Mapkit cosas tales como versiones erróneas, etc. El problema radica realmente en el hecho de que, de cientos de dispositivos, solo estamos viendo este bloqueo en 2 y, además, el bloqueo parecía comenzar a ocurrir solo después de la versión iOS 4.3.Además, el bloqueo se produce al inicio de la aplicación, lo que hace que sea aún más difícil determinar por qué/dónde algo se ha liberado o configurado en cero, etc. (es decir, cuando se produce el bloqueo, en ese momento, mi código aún no toca cualquier cosa relacionada con MapKit). – fatfreddyscat

+0

Seguiré buscando pero realmente parece que de alguna manera la llamada de MapKit a 'goToDefaultLocation' está dando como resultado una ubicación que hace que CFStringGetLength se cuelgue ... – fatfreddyscat

+0

Lo que sería genial es obtener el código que envía a '[ALCityManager localeWithCode:] 'y ** cómo ** lo determina. ¿Intentó romperlo? –

Cuestiones relacionadas