ios - started - fabric kit
objc_msgEnviar[__NSArrayM dealloc] informe de bloqueo a veces de Crashlytics (5)
Hace poco recibí esta aplicación después de actualizar a Crashlytics 3.0 No estoy seguro si proviene de mi código o algo más. El informe del accidente es imposible de rastrear.
Here is the crash report
Crashed: com.apple.main-thread EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x000000009a0dbeb8
0 libobjc.A.dylib objc_msgSend + 16 release
1 CoreFoundation CFRelease + 524
2 CoreFoundation -[__NSArrayM dealloc] + 152
3 libobjc.A.dylib (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 564
4 CoreFoundation _CFAutoreleasePoolPop + 28
5 Foundation -[NSAutoreleasePool release] + 148
6 UIKit -[UIApplication _run] + 588
7 UIKit UIApplicationMain + 1488
8 MyAppName main.m line 32main
9 libdyld.dylib start + 4
Confirmado esto fue introducido en mi aplicación por Crashlytics 3.0.9 lanzada el 10 de junio de 2015 de acuerdo con https://dev.twitter.com/fabric/overview/changelog .
Se actualizó a Crashlytics 3.0.10 y se realizó una actualización de emergencia el sábado. Los resultados hablan por si mismos:
Pasó de 99.9% Crash Free el lunes, lanzó una actualización el martes y el viernes 26 de junio, la tasa de Crash Free se redujo a 98.3%, lo que supuso un aumento de 16 veces en los usuarios que experimentaron una caída. El sábado 27 de junio pude hacer que Apple realizara una revisión de la aplicación acelerada y la nueva versión con Crashlytics 3.0.10 se lanzó en la tienda de aplicaciones el sábado. Como puede ver, la tasa de Crash Free ahora regresa al 99% un par de días después de la publicación y se dirige al 99.9%.
Espero que esto ayude a aquellos de ustedes que se están sacando el pelo ante un choque que fue presentado por alguien que no es su marco de choque. Al menos lo resolvieron rápidamente y la nueva versión parece resolver completamente el problema.
Parece que su NSArray se lanzó y desea acceder a él, por lo que se produjo este bloqueo. Puedes definir tu NSArray como Fuerte en tu modelo o VC
@property(nonatomic, strong) NSArray *myArray
Si no puede adivinar qué NSArraY ha sido lanzado, le recomiendo que depure su aplicación con NSZombie Object en el instrumento para encontrar NSArray exacto.
Resulta ser un error del marco de trabajo.
Esto es lo que obtuve del apoyo de Crashlytics
Esto debería estar todo configurado si actualiza a 3.0.10 del SDK de Crashlytics. Hubo una rara condición de carrera en la versión 3.0.9 que reparamos con la última versión. Abre Fabric.app, actualiza el marco y estarás listo :)
El equipo de soporte de Crashlytics es increíble!
Sucede conmigo muchas veces. solo agregue una referencia fuerte para cada NSArray
en su código. y entonces nunca verás el error como has visto.
Mejor usar el siguiente código:
@property(strong) NSArray *myArray.
CoreFoundation _CFAutoreleasePoolPop + 28
El grupo de autorelease se está agotando, probablemente al final del bucle de IU. Eso significa que todos los objetos lanzados automáticamente en el grupo ahora se liberan.
CoreFoundation -[__NSArrayM dealloc] + 152
Se está lanzando una matriz mutable. Eso significa que todos los artículos que tiene se están lanzando también.
CoreFoundation CFRelease + 524
Uno de los elementos de la matriz está siendo lanzado.
Fallo, el elemento no es válido, ya ha sido desasignado.
Lo que debe inspeccionar son elementos en matrices. Algo definitivamente se ha dejado de publicar. Si está utilizando el recuento manual de referencias, debe inspeccionar los objetos que coloca en las matrices: uno de los elementos está desasignado pero aún se mantiene en alguna matriz.
Un código que provocará un error similar en MRC es el siguiente:
NSMutableArray *array = [NSMutableArray array]; //an autoreleased array
NSObject *object1 = [[NSObject alloc] init];
NSObject *object2 = [[NSObject alloc] init];
[array addObject:object1]
[array addObject:object2]
[object1 release];
[object2 release];
//let''s overrelease
[object1 release];
//when array is released, it will send a release message to object1, too