libc ++ abi.dylib: se terminant avec une exception non interceptée de type NSException (lldb)

186

Je programme une application en Swift et lorsque j'exécute l'application de test sur le simulateur iPhone, tout fonctionne, mais j'essaye de faire glisser vers la droite, ce qui est un geste que j'ai ajouté pour aller à la page suivante (View Controller Two) il plante et affiche ce rapport d'erreur dans le journal de la console.

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) 
pseudo
la source
8
Il est fort probable que vous ayez câblé quelque chose dans un NIB qui n'existe plus. Il semble que le plantage survienne lorsque la vue vers laquelle vous essayez d'effectuer la transition est en cours de chargement. Je vérifierais tous les points de vente dans le volet de l'inspecteur (à droite) et m'assurer qu'ils sont présents? Cela peut également se produire si vous avez câblé un bouton à une IBAction qui n'existe plus (ou qui a été renommée)
cmyr
Il n'y a rien qui n'est pas utilisé et cela me donne toujours l'erreur.
Nick
Si vous utilisez Xcode 8 avec le mode hérité Swift 2.3 consultez cette réponse: stackoverflow.com/a/39548326/5175709
Honey
6
En général, accédez toujours à la console, appuyez sur cmmd + Fpour pouvoir rechercher dans la console et rechercher l' application de terminaison en raison d'une exception non interceptée , exactement 1 ligne après cela, vous verrez la raison: qui vous indique la raison pour laquelle votre application s'est plantée. (ouais, j'ai eu cette erreur trop de fois :)
Chérie
1
Il peut également être utile de créer un point d' arrêt d'exception dans Debug-> Breakpoints. Le débogueur devrait alors, espérons-le, s'arrêter sur la ligne de code où se trouve le problème.
Chuck Boris

Réponses:

394

CMYR - "cela peut aussi arriver si vous avez câblé un bouton à une IBAction qui n'existe plus (ou qui a été renommée)"

Si vous rencontrez ce problème, assurez-vous d'aller à Main.storyboard, cliquez avec le bouton droit sur l'icône de la boîte jaune (contrôleur de vue) en haut du contour du téléphone et SUPPRIMEZ la ou les prises avec des drapeaux jaunes.

Ce qui se passe dans des instances comme celle-ci, c'est que vous avez probablement nommé une action, puis l'avez renommée. Vous devez supprimer l'ancien nom et si c'était le seul problème, cela démarrera directement dans sim!

entrez la description de l'image ici

Trapp
la source
9
Excellente réponse, merci! C'est une faille GRAVE avec XCode. La gestion des erreurs nécessite beaucoup de développement.
HyperionX
3
J'ai également eu le problème avec les triangles jaunes, mais réparer uniquement ces triangles n'a pas résolu le crash pour moi. :(
Andrej
Cela m'est arrivé après avoir renommé un @IBOutlet c'était
Mohammed Fadhl
Devrait vérifier avec certitude que le storyboard est inclus dans la cible ou non
hoangtuanfithou
Il suffit de passer en revue les références des points de vente et des actions dans l'inspecteur de connexions sur le storyboard
Álvaro Agüero
95

Avez-vous défini la variable OS_ACTIVITY_MODE par hasard? Pour vérifier si cette variable est définie (et la désactiver), dans Xcode 9, procédez comme suit:

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
la source
1
Merci! Je n'ai pas vu la raison du crash à cause de cela: "Sélecteur non reconnu envoyé en classe"
Denis Kutlubaev
14
Bon chagrin, Apple. Leurs bogues non corrigés du système d'exploitation nous obligent à l'activer, puis nous manquons d'importants messages de débogage. Belle prise, Siddhesh.
Nate
Merci, j'ai ajouté cette variable quelque temps auparavant et j'ai oublié de la désactiver. Vous avez réussi!
Rodrigo Recio le
1
Wow merci, sans ça je n'aurais jamais attrapé mon petit insecte. Ouais vissez Apple pour toutes leurs informations de débogage de défilement de buggy
ShadowLightz
En effet. Merci!
Senocico Stelian le
86

Dans Xcode 9 et Swift 4:

Imprimez la pile d'exceptions pour connaître la raison de l'exception:

  1. Accédez au navigateur de point d'arrêt.
  2. Ajouter (+) Ajouter un point d'arrêt d'exception.

  3. Sélectionnez le nouveau point d'arrêt, Ctrl-clic, Modifier le point d'arrêt.

  4. Ajouter une action et entrer: po $ arg1

entrez la description de l'image ici

Ahmed Lotfy
la source
3
Il convient de noter que l'action doit être une «commande de débogage» car il existe différentes options de type d'action à entreprendre pour lever l'exception. Mais cela m'a vraiment aidé! Merci!
Todd
Meilleure réponse! Parfois, j'ai cette erreur profondément dans les pods ou les bibliothèques sans plus d'informations. Après avoir lu votre réponse il y a des mois, je l'ai utilisée plusieurs fois et cela m'a aidé à chaque fois.
user8675
1
Cette réponse devrait être indiquée comme "comment faire fonctionner le débogueur Xcode"
Pier Giorgio Misley
Certainement la meilleure réponse, cela m'a beaucoup aidé.
Okan Kurtuluş
8

Dans mon cas, j'appelais une méthode déléguée mais la méthode n'a pas été déclarée.

Cette erreur est générique et peut apparaître pour plusieurs raisons. Assurez-vous que vous n'avez pas désactivé vos journaux pour voir réellement ce qui s'est passé. Activer OS_ACTIVITY_MODE dans les schémas si vous l'avez désactivé. Vous l'avez peut-être désactivé pour éviter un grand nombre de journaux non pertinents, mais ils sont pratiques.

Vous pouvez également tracer la cause plus en détail en ajoutant un point d'arrêt d'exception po $arg1 . Comme déjà mentionné par Ahmed-Lotfi

Voici une liste de contrôle commune que vous pouvez parcourir.

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
la source
1
Belle liste! Dans mon cas, j'avais oublié d'enregistrer l'identifiant de ma cellule personnalisée. Cela pourrait valoir la peine de l'ajouter à votre liste, car cela peut être une chose simple qui est assez facile à oublier.
luismgb
7

D'autres solutions n'ont pas fonctionné pour moi, voici la mienne. Cela s'applique uniquement à Xcode 8 lors de l'exécution dans Swift 2.3 mode hérité de :

On dirait qu'Interface Builder essaie de renommer la méthode qui devrait être connectée au bouton.

Voici un radar avec plus de détails.

La solution (solution de contournement) consiste à remplacer manuellement le nom du paramètre de méthode par _:

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

Changez pour ceci:

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

Il peut également s'agir d'un nom d'identifiant de Segue incorrect. Par exemple -

performSegueWithIdentifier("wrongSegueName", sender: self)
M_R_K
la source
4

Ma situation était un peu différente, j'essayais de passer à un UINavigationController, et ce qui a résolu le problème pour moi était d'obtenir la partie principale de la file d'attente.

Pour Objective-C:

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

Pour Swift 3:

DispatchQueue.main.async { [weak self] in
    self?.performSegue(withIdentifier: "SegueName", sender: self)
}
Simon
la source
3

Cela a commencé à se produire pour moi sur Xcode 7, et je n'avais aucun point de vente avec des drapeaux jaunes que je pouvais supprimer.

La seule chose qui a fonctionné pour moi a été de remplacer cette ligne dans AppDelegate:

[window addSubview:viewController.view];

à:

[window setRootViewController:viewController];
Eran Talmor
la source
3

Pour moi, le problème était dans mon IBAction avec un UIButton.

Lorsque vous Ctrl + Glissez pour créer une IBAction à partir d'un UIButton, assurez-vous de sélectionner "UIButton" dans la liste déroulante Type. La sélection par défaut d'AnyObject provoque le blocage de l'application lorsque vous appuyez sur UIButton.

entrez la description de l'image ici

Chris Livdahl
la source
J'avais le type d'action défini sur AnyObject, mais dans mon cas, cela n'a pas fonctionné.
Andrej
Si vous lisez mon message, je souligne qu'AnyObject ne fonctionne pas, comme vous l'avez constaté.
Chris Livdahl
3

Il peut également s'agir d'une séquence déclenchée cassée, vérifiez votre storyboard, dès que vous reconnectez les segues ou la sortie, tout devrait fonctionner à nouveau.

Vérifiez les Segues

Assurez-vous que le Identifierde la Segue est correct et similaire à votre code .

entrez la description de l'image ici

Contre Bulaquena
la source
2

J'ai rencontré ce problème lorsque j'ai changé le nom de la variable qui se connectait à l'un de mes boutons. Alors garde ça en tête!

Sami
la source
2

Je suis nouveau sur Xcode, il m'a donc fallu quelques heures pour résoudre le problème afin de charger le fichier xls. J'ai suivi la plupart des exemples de codes et aucun d'entre eux ne résout l'erreur Xcode affichée.

La solution que j'ai trouvée était que nous devions spécifier le 'Ajouter aux cibles:' cochez le projet à ajouter, lorsque nous importons le fichier xls dans Xcode par glisser-déposer dans Project -> Supporting Files.

Mark Khor
la source
1

il peut y avoir plus de 1 IBAction pour un bouton dans votre contrôleur de vue, essayez de les trouver et supprimez tous les éléments précédents pour ce bouton dans votre contrôleur et créez un nouveau bouton. Cela résoudra votre problème.

Amit Verma
la source
1

Assurez-vous que vous n'appliquez pas dynamiquement des contraintes relatives à une vue qui n'est pas encore présente dans la hiérarchie des vues.

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;

Dans l'exemple ci-dessus, bottomView a été intégré à la hiérarchie des vues avant d'y appliquer des contraintes relatives.

Vipin
la source
1

J'ai cette erreur des 2 manières suivantes:

J'obtenais cette erreur lorsque je poussais dans un autre UIViewController.

CEPENDANT par erreur, j'ai sous-classé l'autre classe de UITabBarController et j'obtenais cette erreur.

Comment je l'ai réparé? Je me suis sous-classé UIViewControlleret je n'étais plus en panne :)


Je ne voulais pas utiliser de storyboard. Alors je l'ai supprimé. Pourtant j'oublie de supprimer sa référence dans les paramètres du projet . J'ai juste cliqué sur le projet >> Général >> Informations sur le déploiement >> et j'ai ensuite mis l'interface principale en espace noir. (Il était auparavant défini sur main)

Comme vous pouvez le voir pour les deux situations, vous obtenez une erreur pour accéder à un objet qui existe ...

Mon chéri
la source
1

Je vais ajouter mon problème à la liste des solutions possibles au cas où quelqu'un d'autre arriverait sur ce fil.

Identificateur de cellule TableView. Tout d'abord, assurez-vous que votre cellule a un identifiant. Ensuite, assurez-vous de référencer cet identifiant lorsque vous retirez la cellule de la file d'attente.

Temps de rosée
la source
1

Swift 4 :

J'obtenais cette erreur en raison d'un changement dans l'API UIVisualEffectView. Dans Swift 3, c'était correct de faire ceci: myVisuallEffectView.addSubview(someSubview)

Mais dans Swift 4, j'ai dû le changer pour ceci: myVisualEffectView.contentView.addSubview(someSubview)

sifflet solitaire
la source
1

J'ai eu cette même erreur lorsque j'ai eu une faute de frappe pour l'une des vues lors de la création de contraintes à l'aide du formateur visuel. J'espère que cela aidera quelqu'un ... ou moi encore un jour.

budidino
la source
0

Pour mon cas, Xcode 8.2.1 , j'avais une vue Map Kit dans un contrôleur de vue. Alors je suis allé à

Phases de construction> Lier un binaire avec des bibliothèques

et ajouté MapKit.framework, alors c'était bien.

Je pense que cela s'appliquera également à d'autres points de vue qui nécessitent un cadre.

PS Running sur iOS 9 m'a dit qu'il y avait un problème avec Map Kit View, tandis que sur iOS 10 ne m'a rien dit!

Protocole
la source
0

Seule la solution "drop armageddon" a fonctionné pour moi:

  • supprimer l'application de l'appareil
  • projet propre
  • exécuter une nouvelle installation sur l'appareil
Juan Fran Jimenez
la source
0

Dans mon cas, XCode était fatigué et ne parvenait pas à démarrer l'application avec ce message, en raison d'un échec d'assertion (qui a été défini par notre code).

L'exécution sur un autre appareil a montré l'échec d'assertion, que nous avons pu corriger, et tout est revenu à la normale.

Ege Akpinar
la source
0

Pour Swift 2.3

Cela semble être un bogue avec Xcode 8 et Swift 2.3, si vous connectez l'action du bouton à votre code via le storyboard, assurez-vous que Xcode n'a pas renommé l'action, pour moi, il ajoute un withSender: à la fin des méthodes , donc ce que je fais est d'aller dans mon code et de renommer la méthode pour qu'elle corresponde à celle écrite par Xcode.

Pour toute autre version, cochez la bonne réponse.

Fernando Mata
la source
0

Dans mon cas, c'était InterfaceBuilder. J'avais copié des vues d'un autre ViewController qui ont gâché les contraintes.

Dans InterfaceBuilder, j'ai eu l'erreur de flèche rouge sur le ViewController.

Pendant l'exécution, l'application s'est plantée.

Vincent
la source
0

Dans mon cas, l'application s'est plantée parce que je n'ai pas défini l'adhésion cible du storyboard.

Fredpi
la source
0

Dans mon cas, le projet Build Settingscontenait des répertoires non existants pour Framework Search Pathset Library Search Paths.

Manuel
la source
0

J'ai eu deux problèmes:

1) Ma cible n'avait pas le contrôleur de vue inclus qui était utilisé dans le fichier de storyboard.

2) Mon storyboard avait environ 3 ans, j'ai dû recréer l'un des contrôleurs de vue dans le contrôleur de la barre d'onglets à partir de zéro (il n'avait qu'un UITextField et je ne sais toujours pas pourquoi cela ne fonctionnait pas)

Genki
la source
0

Encore une autre cause possible:

Dans mon cas, j'avais un xibet j'appelais Bundle.main.loadNibNamed(...à quel point il tombait en panne. Tout mon IBOutletset IBActionssemblait bien. En fin de compte, j'ai remarqué que le nibchargement était en fait, mais lorsque j'ai essayé d'accéder à la première (et seule) vue ( nib.first), cela ne fonctionnait pas. En fait nib.countretournait un très grand entier (max int?), Au lieu de l'attendu1 . J'ai essayé de rajouter la vue, mais toujours pas de chance.

En fin de compte, j'ai supprimé tout le xibfichier et j'ai recommencé (mais j'ai conservé certaines des vues dans mon presse-papiers afin de pouvoir les coller au lieu de les recréer à nouveau).

Cela a fonctionné!

Nikolay Suvandzhiev
la source
0

Cela peut se produire si vous avez une table et oubliez d'attribuer UITableViewDelegate et UITableViewDataSource à la classe

user3561494
la source