libc ++ abi.dylib: termina con una excepción no detectada del tipo NSException (lldb)

186

Estoy programando una aplicación rápidamente y cuando ejecuto la aplicación de prueba en el simulador de iPhone todo funciona, pero luego trato de deslizar hacia la derecha, que es un gesto que agregué para que vaya a la siguiente página (Ver controlador dos) se bloquea y muestra este informe de error en el registro de la consola.

2014-10-18 12:07:34.400 soundtest[17081:818922] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<soundtest.ViewControllerTwo 0x7f92f1f20090> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key sfdfa.'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001067813f5 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001082afbb7 objc_exception_throw + 45
    2   CoreFoundation                      0x0000000106781039 -[NSException raise] + 9
    3   Foundation                          0x0000000106b984d3 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
    4   CoreFoundation                      0x00000001066cb400 -[NSArray makeObjectsPerformSelector:] + 224
    5   UIKit                               0x00000001072ce97d -[UINib instantiateWithOwner:options:] + 1506
    6   UIKit                               0x000000010712f698 -[UIViewController _loadViewFromNibNamed:bundle:] + 242
    7   UIKit                               0x000000010712fc88 -[UIViewController loadView] + 109
    8   UIKit                               0x000000010712fef9 -[UIViewController loadViewIfRequired] + 75
    9   UIKit                               0x000000010713038e -[UIViewController view] + 27
    10  UIKit                               0x00000001076cd83f -[_UIFullscreenPresentationController _setPresentedViewController:] + 65
    11  UIKit                               0x000000010710bc49 -[UIPresentationController initWithPresentedViewController:presentingViewController:] + 105
    12  UIKit                               0x000000010713c121 -[UIViewController _presentViewController:withAnimationController:completion:] + 1746
    13  UIKit                               0x000000010713e461 __62-[UIViewController presentViewController:animated:completion:]_block_invoke + 132
    14  UIKit                               0x000000010713e385 -[UIViewController presentViewController:animated:completion:] + 229
    15  UIKit                               0x00000001073bb9d6 _UIGestureRecognizerSendActions + 262
    16  UIKit                               0x00000001073ba679 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] + 532
    17  UIKit                               0x00000001073bf296 ___UIGestureRecognizerUpdate_block_invoke662 + 51
    18  UIKit                               0x00000001073bf192 _UIGestureRecognizerRemoveObjectsFromArrayAndApplyBlocks + 254
    19  UIKit                               0x00000001073b520d _UIGestureRecognizerUpdate + 2796
    20  UIKit                               0x00000001070520a6 -[UIWindow _sendGesturesForEvent:] + 1041
    21  UIKit                               0x0000000107052cd3 -[UIWindow sendEvent:] + 667
    22  UIKit                               0x000000010701fae1 -[UIApplication sendEvent:] + 246
    23  UIKit                               0x000000010702cbad _UIApplicationHandleEventFromQueueEvent + 17370
    24  UIKit                               0x0000000107008233 _UIApplicationHandleEventQueue + 1961
    25  CoreFoundation                      0x00000001066b6ad1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    26  CoreFoundation                      0x00000001066ac99d __CFRunLoopDoSources0 + 269
    27  CoreFoundation                      0x00000001066abfd4 __CFRunLoopRun + 868
    28  CoreFoundation                      0x00000001066aba06 CFRunLoopRunSpecific + 470
    29  GraphicsServices                    0x000000010a1699f0 GSEventRunModal + 161
    30  UIKit                               0x000000010700b550 UIApplicationMain + 1282
    31  soundtest                           0x000000010624503e top_level_code + 78
    32  soundtest                           0x000000010624507a main + 42
    33  libdyld.dylib                       0x000000010ae4a145 start + 1
    34  ???                                 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 
Mella
fuente
8
Es muy probable que haya conectado algo en una NIB que ya no existe. Parece que el bloqueo se produce cuando se carga la vista a la que está intentando realizar la transición. ¿Verificaría todos los puntos de venta en el panel del inspector (a la derecha) y me aseguraría de que estén presentes? Esto también podría suceder si ha conectado un botón a una IBAction que ya no existe (o ha cambiado de nombre)
cmyr
No hay nada que no se esté usando y todavía me está dando el error.
Nick
Si está utilizando Xcode 8 con el modo heredado Swift 2.3, vea esta respuesta: stackoverflow.com/a/39548326/5175709
Honey
66
En general, siempre vaya a la consola, presione cmmd + Fpara que pueda buscar dentro de la consola y buscar la aplicación de terminación debido a una excepción no detectada , exactamente 1 línea después de eso verá la razón: que le indica la razón por la cual su aplicación se ha bloqueado. (Sí, he tenido este error muchas veces :)
Miel
1
También podría ser útil crear un punto de interrupción de excepción en Depuración-> Puntos de interrupción. El depurador debería detenerse en la línea de código donde se encuentra el problema.
Chuck Boris

Respuestas:

394

CMYR: "esto también podría suceder si ha conectado un botón a una IBAction que ya no existe (o ha cambiado de nombre)"

Si se encuentra con este problema, asegúrese de ir a Main.storyboard, haga clic DERECHO en el ícono del cuadro amarillo (ver controlador) en la parte superior del contorno del teléfono y BORRE la (s) salida (s) con banderas amarillas.

Lo que sucede en casos como este es que probablemente nombró una acción y luego le cambió el nombre. ¡Necesita eliminar el nombre anterior y si ese fuera el único problema, comenzará de inmediato en sim!

ingrese la descripción de la imagen aquí

Trapp
fuente
9
Gran respuesta, gracias! Este es un defecto GRAVE con XCode. El manejo de errores necesita mucho desarrollo.
HyperionX
3
También tuve el problema con los triángulos amarillos, pero arreglar solo esos triángulos no resolvió el problema por mí. :(
Andrej
Esto me sucedió después de cambiar el nombre de un @IBOutlet
Mohammed Fadhl el
Debería verificar si el guión gráfico está incluido en el objetivo o no
hoangtuanfithou
Solo revise los puntos de venta y las referencias de acciones en Connections Inspector en el guión gráfico
Álvaro Agüero
95

¿Estableció la variable OS_ACTIVITY_MODE por casualidad? Para verificar si tiene esta variable establecida (y desactivarla), en Xcode 9, haga lo siguiente:

Select from Xcode menu Product -> Scheme -> Edit Scheme.. Select the Run scheme and look under Arguments. If you see the OS_ACTIVITY_MODE variable checked, deselect it

Siddhesh Mahadeshwar
fuente
1
¡Gracias! No vi la razón del accidente por eso: "selector no reconocido enviado a clase"
Denis Kutlubaev
14
Buena pena, Apple. Sus errores de sistema operativo no corregidos nos obligan a activar esto, y luego perdemos mensajes de depuración importantes reales. Buena captura, Siddhesh.
Nate
Gracias, agregué esta variable hace algún tiempo y olvidé deshabilitarla. ¡Lo lograste!
Rodrigo Recio
1
Wow, gracias, sin eso nunca habría atrapado mi pequeño insecto. Sí, jodan a Apple por toda su información de depuración con errores de desplazamiento
ShadowLightz
En efecto. ¡Gracias!
Senocico Stelian
86

En Xcode 9 y Swift 4:

Imprima la pila de excepciones para conocer el motivo de la excepción:

  1. Ir a mostrar el navegador de punto de interrupción.
  2. Agregar (+) Agregar punto de interrupción de excepción.

  3. Seleccione el nuevo punto de interrupción, Control-Clic, Editar punto de interrupción.

  4. Agregar acción e ingresar: po $ arg1

ingrese la descripción de la imagen aquí

Ahmed Lotfy
fuente
3
Cabe señalar que la Acción debe ser un 'Comando de depurador' ya que hay varias opciones de qué tipo de Acción tomar para lanzar la excepción. ¡Pero realmente me ayudó! ¡Gracias!
Todd
¡La mejor respuesta! A veces recibí este error en pods o libs sin más información. Después de leer su respuesta hace meses, la usé muchas veces y siempre me ayudó.
user8675
1
Esa respuesta debe señalarse como "cómo hacer que el depurador de Xcode funcione"
Pier Giorgio Misley
Definitivamente la mejor respuesta, me ayudó mucho.
Okan Kurtuluş
8

En mi caso, estaba llamando a un método delegado pero el método no fue declarado.

Este error es genérico y puede aparecer por varias razones. Asegúrese de no haber deshabilitado sus Registros para ver realmente qué sucedió. Habilite OS_ACTIVITY_MODE en los esquemas si lo ha deshabilitado. Es posible que lo haya deshabilitado para evitar una gran cantidad de registros irrelevantes, pero son útiles.

También puede rastrear la causa con más detalles agregando un punto de interrupción de excepción po $arg1. Como ya mencionó Ahmed-Lotfi

Aquí hay una lista de verificación común que puede revisar.

2) Check if you have renamed an IBOutlet and calling it
3) Check if you have renamed a method name or the method doesn't exist
4) Check if you are trying to add or remove any view from hierarchy
5) Check for any missing framework or library
6) Check if you’ve forgot to register your custom cell identifier
7) Check for any missing flag in the Proejct Setting (-obj) or any other linker flag etc.
Naveed Abbas
fuente
1
Buena lista! En mi caso, me había olvidado de registrar el identificador de mi celda personalizada. Puede valer la pena agregarlo a su lista, ya que puede ser algo simple que es bastante fácil de olvidar.
luismgb
7

Otras soluciones no funcionaron de mí, aquí está la mía. Solo se aplica a Xcode 8 cuando se ejecuta en modo heredado Swift 2.3 :

Parece que Interface Builder está intentando cambiar el nombre del método que se debe conectar al botón.

Aquí hay un radar con más detalles.

La solución (solución alternativa) es reemplazar manualmente el nombre del parámetro del método para _:

@IBAction func editPictureTapped(sender: UIButton) {  // not working
    print("Tapped")
}

Cambiar a esto:

@IBAction func editPictureTapped(_: UIButton) {     // working OK
    print("Tapped")
}
Andrej
fuente
5

También podría estar equivocado Segue Identifier Name. P.ej -

performSegueWithIdentifier("wrongSegueName", sender: self)
M_R_K
fuente
4

Mi situación era un poco diferente, estaba tratando de pasar a una UINavigationController, y lo que me solucionó fue obtener la porción de la cola principal.

Para el objetivo-C:

dispatch_async(dispatch_get_main_queue(), ^{
    [self performSegueWithIdentifier:@"SegueName" sender:self];
});

Para Swift 3:

DispatchQueue.main.async { [weak self] in
    self?.performSegue(withIdentifier: "SegueName", sender: self)
}
Simón
fuente
3

Esto comenzó a sucederme en Xcode 7, y no tenía salidas con banderas amarillas que pudiera eliminar.

Lo único que funcionó para mí fue reemplazar esta línea en AppDelegate:

[window addSubview:viewController.view];

a:

[window setRootViewController:viewController];
Eran Talmor
fuente
3

Para mí, el problema estaba en mi IBAction con un UIButton.

Cuando Ctrl + Arrastra para crear una IBAction desde un UIButton, asegúrese de seleccionar "UIButton" en el menú desplegable Tipo. La selección predeterminada de AnyObject hace que la aplicación se bloquee cuando toca el botón UIB.

ingrese la descripción de la imagen aquí

Chris Livdahl
fuente
Tenía el Tipo de acción configurado en AnyObject, pero en mi caso no funcionó.
Andrej
Si lees mi publicación, señalo que AnyObject no funciona, como has encontrado.
Chris Livdahl
3

También podría ser un Segmentos activados rotos, revise su guión gráfico, tan pronto como vuelva a conectar los segmentos o la salida, todo debería funcionar nuevamente.

Verifica los Segues

Asegúrese de que el IdentifierSegue sea correcto y similar a su código .

ingrese la descripción de la imagen aquí

Contras Bulaquena
fuente
2

Me encontré con este problema cuando cambié el nombre de la variable que se conectaba a uno de mis botones. ¡Así que tenlo en mente!

Sami
fuente
2

Soy nuevo en Xcode, por lo que me tomó algunas horas resolver el problema para cargar el archivo xls. Seguí la mayoría de los códigos de muestra hasta allí y ninguno de ellos resuelve el error Xcode que se muestra.

La solución que encontré fue que debemos especificar la opción 'Agregar a objetivos:' marcar el proyecto para agregar, cuando importamos el archivo xls en Xcode arrastrando y soltando en Proyecto -> Archivos de soporte.

Mark Khor
fuente
1

puede haber más de 1 IBAction para un botón en su controlador de vista, intente encontrarlos y eliminar todos los elementos anteriores para ese botón en su controlador y cree un nuevo botón. Resolverá su problema.

Amit Verma
fuente
1

Asegúrese de no aplicar dinámicamente restricciones relativas a una vista que aún no está en la jerarquía de vistas.

UIView *bottomView = [[UIView alloc] initWithFrame:CGRectZero];
[self.view addSubview:bottomView];

bottomConstraint = [NSLayoutConstraint constraintWithItem:bottomView
                                                attribute:NSLayoutAttributeBottom
                                                relatedBy:NSLayoutRelationEqual
                                                   toItem:self.view
                                                attribute:NSLayoutAttributeBottom
                                               multiplier:1
                                                 constant:0];
bottomConstraint.active = YES;

En el ejemplo anterior, bottomView ha pasado a formar parte de la jerarquía de vistas antes de aplicar restricciones relativas.

Vipin
fuente
1

Tengo este error de las siguientes 2 formas:

Estaba recibiendo este error cuando estaba presionando en otro UIViewController.

SIN EMBARGO, por error, subclasifique la otra clase de UITabBarController y este error.

¿Cómo lo solucioné? Subclasé UIViewControllery ya no me caía :)


No quería usar storyboard. Entonces lo borré. Sin embargo, me olvido de eliminar su referencia en la configuración del proyecto . Acabo de hacer clic en el proyecto >> General >> Información de implementación >> y luego configuro la interfaz principal en el espacio negro. (Se configuró previamente como principal)

Como puede ver en ambas situaciones, obtiene un error al acceder a algún objeto que existe ...

Miel
fuente
1

Agregaré mi problema a la lista de posibles soluciones en caso de que alguien más se encuentre con este hilo.

Identificador de celda de TableView. En primer lugar, asegúrese de que su celda tenga un identificador. En segundo lugar, asegúrese de hacer referencia a ese identificador cuando retire la celda.

Tiempo de rocío
fuente
1

Swift 4 :

Estaba recibiendo este error debido a un cambio en la api UIVisualEffectView. En Swift 3 estaba bien hacer esto: myVisuallEffectView.addSubview(someSubview)

Pero en Swift 4 tuve que cambiarlo a esto: myVisualEffectView.contentView.addSubview(someSubview)

silbido solitario
fuente
1

Tuve este mismo error cuando tuve un error tipográfico para una de las vistas al crear restricciones usando el formateador visual. Espero que eso ayude a alguien ... o a mí otra vez algún día.

budidino
fuente
0

Para mi caso, Xcode 8.2.1 , tenía una vista de kit de mapa en un controlador de vista. Entonces fui a

Fases de construcción> Enlace binario con bibliotecas

y agregó MapKit.framework, entonces estuvo bien.

Creo que esto también se aplicará a otras vistas que requieren marco.

PS Running en iOS 9 me dijo que había un problema con Map Kit View, ¡mientras que en iOS 10 no me dijo nada!

Protocolo
fuente
0

Solo la solución "drop armageddon" funcionó para mí:

  • eliminar la aplicación del dispositivo
  • proyecto limpio
  • ejecutar nueva instalación en dispositivo
Juan fran jimenez
fuente
0

En mi caso, XCode se cansó y no pudo iniciar la aplicación con este mensaje, debido a un error de aserción (que fue establecido por nuestro código).

La ejecución en otro dispositivo mostró el error de aserción, que pudimos solucionar, y todo volvió a la normalidad.

Ege Akpinar
fuente
0

Para Swift 2.3

Esto parece ser un error con Xcode 8 y Swift 2.3, si está conectando la acción del botón a su código a través del guión gráfico, asegúrese de que Xcode no haya cambiado el nombre de la acción, para mí está agregando un withSender: al final de los métodos , así que lo que hago es ir a mi código y cambiar el nombre del método para que coincida con el que escribió Xcode.

Para cualquier otra versión, marque la respuesta correcta.

Fernando Mata
fuente
0

En mi caso, fue InterfaceBuilder. Copié algunas vistas de otro ViewController que estropeó las restricciones.

En InterfaceBuilder tuve el error de flecha roja en el ViewController.

Durante la ejecución, la aplicación se bloqueó.

Vincent
fuente
0

En mi caso, la aplicación se bloqueó porque no configuré la membresía objetivo del guión gráfico.

fredpi
fuente
0

En mi caso, el proyecto Build Settingscontenía algunos directorios no existentes para Framework Search Pathsy Library Search Paths.

Manuel
fuente
0

Tuve dos problemas:

1) Mi objetivo no tenía el controlador de vista incluido que se utilizó en el archivo del guión gráfico.

2) Mi guión gráfico tenía aproximadamente 3 años, tuve que recrear uno de los controladores de vista en el controlador de la barra de pestañas desde cero (solo tenía un UITextField y todavía no sé por qué no estaba funcionando)

Genki
fuente
0

Otra posible causa:

En mi caso, tenía un xiby estaba llamando Bundle.main.loadNibNamed(...en ese momento se estaba bloqueando. Todo mi IBOutletsy IBActionsparecía estar bien. Al final noté que en nibrealidad se estaba cargando, pero cuando intenté acceder a la primera (y única) vista ( nib.first), eso no funcionaba. De hecho, nib.countestaba devolviendo un número entero muy grande (max int?), En lugar del esperado1 . Intenté volver a agregar la vista, pero todavía no tuve suerte.

Al final, eliminé todo el xibarchivo y comencé de nuevo (pero conservé algunas de las vistas en mi portapapeles para poder pegarlas en lugar de volver a crearlas).

Esto funcionó!

Nikolay Suvandzhiev
fuente
0

Esto puede suceder si tiene una tabla y olvida asignar UITableViewDelegate y UITableViewDataSource a la clase

usuario3561494
fuente