Acabo de recibir mi primer informe de accidente de Crashlytics y estoy tratando de corregir el problema. Por desgracia, es sólo una línea de código que se ejecuta en los dispositivos más antiguos, así que no puedo probarlo en mi iPhone 6.

El informe de accidente de Crashlytics destacan dos hilos, el primero dice:

Fatal Exception: NSInvalidArgumentException
-[CABasicAnimation altitude]: unrecognized selector sent to instance 0x17734440

Mientras que el segundo se lee:

Crashed: Map Update :: NSOperation 0x1a839470
SIGABRT ABORT at 0x316a3dfc

La indicada en la línea de código para ambos hilos es:

let relativeAlt = mylocation.altitude - appDelegate.elevation

Donde:

let mylocation = self.mapView.myLocation
let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)

Estoy tratando de entender lo que estoy leyendo en el informe del accidente. La manera en que yo veo el programa no entiende el altitude referencia hecha por alguna razón? Esto no tiene sentido para mí, ya que este accidente parece ocurrir después de que la aplicación ha estado funcionando durante varios minutos sin error, el resaltado de la línea de código que se ejecuta posiblemente cientos de veces antes de que la aplicación se estrelló. Lo que realmente está sucediendo aquí?

Información Adicional:

Desde la escritura, he recibido otros accidentes que creo que se derivan de la misma cuestión:

Crashed: Map Update :: NSOperation 0x19fb2d50
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x11d077ca

Crashed: Map Update :: NSOperation 0x145ced50
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x81450a64

La primera de relieve la siguiente línea en el código (creo que desde que yo había trabajado en la aplicación ya que esta versión beta y los números de línea han cambiado un poco):

self.lastLocation = (self.mapView.myLocation as CLLocation).coordinate

Mientras que el segundo choque sólo me dio:

libobjc.A.dylib 
objc_msgSend + 5

El primero de la nueva accidentes (Que proporciona una línea de código) proporcionado este informe:

Thread : Crashed: Map Update :: NSOperation 0x19fb2d50
0  libobjc.A.dylib                0x3105c708 objc_release + 7
1  FlightTracker                  0x000ba830 FlightTracker.MapViewController.    (locationManager (FlightTracker.MapViewController) -> (Swift.ImplicitlyUnwrappedOptional<ObjectiveC.CLLocationManager>, didUpdateLocations : Swift.ImplicitlyUnwrappedOptional<Swift.Array<Swift.AnyObject>>) -> ()).(closure #1) (MapViewController.swift:168)
2  Foundation                     0x244ce0fd __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 8
3  Foundation                     0x24438fc5 -[NSBlockOperation main] + 148
4  Foundation                     0x2442b845 -[__NSOperationInternal _start:] + 768
5  Foundation                     0x244d0a57 __NSOQSchedule_f + 186
6  libdispatch.dylib              0x315ad5d9 _dispatch_queue_drain$VARIANT$mp + 948
7  libdispatch.dylib              0x315ad0a9 _dispatch_queue_invoke$VARIANT$mp + 84
8  libdispatch.dylib              0x315af0d3 _dispatch_root_queue_drain + 330
9  libdispatch.dylib              0x315b01fb _dispatch_worker_thread3 + 106
10 libsystem_pthread.dylib        0x31720e25 _pthread_wqthread + 668
  • La excepción dice que invoca altitude en un CABasicAnimation objeto – que no admite. Esto indica que probablemente se han invocado el método en un objeto lanzado y que la memoria ha sido reutilizados para una CABasicAnimation. ¿De dónde viene el myLocation propiedad de la vista de mapa vienen? No se trata de una propiedad de MKMapView
  • myLocation es una propiedad de la forma CLLocation! heredado de los Mapas de Google, iOS de la API. Si el objeto había sido puesto en libertad podría tener sentido, dado que el dispositivo sólo había 14MB de RAM disponible cuando el dispositivo se estrelló.
  • ¿Declarar let mylocation a nivel local dentro de el mismo método que let relativeAlt = mylocation.altitude - appDelegate.elevation?
  • Sí, lo hice. Es el programa de instalación como esta: if let mylocation = self.mapView.myLocation { let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate) if CMAltimeter.isRelativeAltitudeAvailable() { } else { let relativeAlt = mylocation.altitude - appDelegate.elevation }
  • Tal vez la fuerza de un molde para asegurarse de que usted está almacenando el tipo, por ejemplo: si vamos a mylocation = auto.mapView.myLocation como CLLocation
  • Perdón por mi ignorancia pero ¿qué tiene que cambiar entonces? Incluso si la aplicación no se bloquee, se altitud, a continuación, no será registrado para el resto de la sesión?
  • Usted está recibiendo este error: [CABasicAnimation altitude]: lo que implica que mylocation es un CABasicAnimation. Estoy diciendo que usted debe asegurarse de que es un CLLocation a declarar.
  • Ah bueno, ya veo lo que quieres decir. Gracias por la comprensión, estoy seguro de que esto sólo será el principio en términos de eliminar a los insectos y extraños comportamientos! Voy a tratar como usted lo sugirió, sin embargo, tienen una gran noche 🙂

InformationsquelleAutor user3185748 | 2015-01-18

3 Comentarios

  1. 4

    Probablemente no es su problema, pero yo sólo tenía una SIGABRT que me estaba volviendo nueces (que es como acabé mirando a esta pregunta) y voy a publicar mi solución en caso de que ayuda a algunos futuro S. O. spelunker.

    En mi iPad, pero no importa) de la aplicación, usted puede pulsar un botón que se traduce en la creación de un no-pantalla completa UIViewController que contiene un UITableView, y este viewController se presenta a través de UIPopoverController.

    En mi caso, yo tenía un tornillo-en mi carga del formato tableview elementos que, en el momento de crear el formato tableview celular acabé tratando de agregar un valor nulo en un diccionario. (Es una larga historia, que tiene que ver con una infraestructura de clase que se espera de los datos en un determinado formato.)

    De todos modos, el intento de acceso newViewController.view causado la SIGABRT en esa línea, que no tienen ni idea de que el problema estaba relacionado con el llenado del formato tableview de la célula. Nada en formato tableview relacionados con la era evidente en la traza de la pila, así que me tomó un buen rato para estrechar las cosas. Finalmente me acaba de adivinar «tal vez es el formato tableview» y desconectado de la IBOutlet y delegado/origen de datos para ver si el accidente fue.

    …Y lo hizo. Que me llevan por el camino de la búsqueda de la real problema.

    De todos modos, esa es mi historia. Espero que sea útil para alguien.

  2. 2

    Debido a la falta de un completo/adecuado de informe de accidente y la falta de más de código y la arquitectura, la siguiente es una suposición utilizando pequeños trozos de información que están disponibles.

    Tiene acceso a una variable en un subproceso en segundo plano (NSOperation cola) que fue lanzado en otro hilo y ahora no está disponible por más tiempo, de modo que el puntero muestra a algunos otros aleatoria de objetos en la memoria. Y que el objeto random, seguramente no tiene idea de qué hacer con el altitude mensaje, que es, a continuación, causando el bloqueo.

    Usted tiene que asegurarse de que todas las variables utilizadas en el subproceso en segundo plano, están disponibles y no se libera en otro hilo.

    • gracias por tomarse el tiempo para responder. He combinado las preguntas anteriores. Yo también proporciona el seguimiento de pila de uno de los recientes accidentes. También, a mi entender es que no se puede soltar un objeto con Swift, ¿es correcto esto? Si ese fuera el caso, no entiendo cómo una determinada variable podría desaparecer en otro hilo.
  3. 2

    Wow, yo tenía otra «imposible rastrear» la solución a esto que me estaba volviendo loco.

    Más temprano en el día, yo había hecho una de las principales refactorizar como algunos de los objetos en mi juego había nombres como RFCFoo y algunos eran como RfcBar y yo quería para estandarizar el uso de las mayúsculas.

    Lo que he usado XCode del Refactor->Rename... herramienta, y funcionó muy bien, excepto por una cosa:

    No cambiar el nombre de uno específico .xib archivo, que se mantuvo como «RFCBlahBlah.xib» cuando yo estaba tratando de cargar como «RfcBlahBlah.xib»

    De nuevo, espero que esto sea de utilidad para algunos futuro PARA el buscador.

Dejar respuesta

Please enter your comment!
Please enter your name here