Le diagnostic de EXC_BAD_INSTRUCTION à Swift de la bibliothèque standard
Mon Swift application en cours d'exécution dans le simulateur iOS est arrêté dans le débogueur avec erreur d'exécution EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, sub code=0x0)
.
Selon la La WWDC 2014 Session 409 ceci est généralement dû à l'échec d'assertion.
Dans l'évolution actuelle de la version Bêta de Xcode 6, le débogueur la trace de la pile et de l'erreur ci-dessus ne fournit pas suffisamment d'informations pour voir ce qu'est la question. Comment puis-je savoir où est le problème?
OriginalL'auteur Palimondo | 2014-06-12
Vous devez vous connecter pour publier un commentaire.
Il semble que la source la plus fréquente de cette erreur (au moment d'écrire ces lignes: Xcode 6 Beta 1), c'est que certains implicitement déballé en option de la propriété ou la variable est
nil
.Pour des raisons de commodité, la plus Objective-C de l'API sont relayés à Swift avec implicitement déballé options. Ils sont indiqués par un point d'exclamation derrière la déclaration de type:
AnyObject[]!
Si le débogueur s'arrête dans votre code, vérifiez que la ligne et recherchez implicitement déballé options qui pourraient être
nil
.Parfois, le débogueur s'arrête avec une erreur d'exécution de profondeur dans le système Swift de la bibliothèque. Cela arrive par exemple quand vous passez une fermeture de méthodes de collecte comme
filter
,map
,reduce
et coll. L'erreur d'exécution se produit alors sur le site d'appel de ces fonctions de la bibliothèque, mais la définition peut-être dans les différentes parties de votre code, si vous avez défini la fonction/fermeture. Y chercher implicitement déballé options qui pourraient être nul au moment de l'exécution.Pour se prémunir contre ces types d'erreur d'être conscient que même si Swift compilateur ne vous forcera pas à gérer le potentiel
nil
valeurs retournées à base de Cacao, vous devez utiliser de fixation en option, le chaînage optionnelou option de passer où la valeur de retour de Objective-C terres peuvent être
nil
.Espérons que les futures versions de Swift compilateur va émettant des plus utiles messages de diagnostic et d'erreur pour ce type de problème!
J'ai juste eu cette erreur qui n'a rien à voir avec le déballage des options ou des références - tout était un type struct avec comme
as
ou!
ou quoi que ce soit. Tourné c'était à cause de math overflow.OriginalL'auteur Palimondo
J'ai trouvé (après de nombreuses heures) que cette erreur peut apparaître sur la mauvaise ligne.
Par exemple
Comme vous pouvez le voir, l'application plante lorsque je vérifie pour le néant, mais ensuite "continue" à travers, parce que l'impression des déclarations. Il passe ensuite à "en arrière" et se bloque.
Je suis venu à la conclusion qu'il existe une source de mappage de bug dans XCode (7) lorsqu'un néant variable est non-enveloppé. Dans ce cas, j'ai eu une variable (un peu plus loin dans mon code), qui a été de néant et de l'être déballé.
Le problème est que le compilateur n'a pas de drapeau de la variable réelle qui a été de néant, qu'elle avait quelque chose d'autre entièrement.
Donc, si vous exécutez dans ce vilain bug, passer par toutes les variables possibles, qui peut être nul et vérifier leur déballage. Vous êtes susceptible d'ôter un nul, c'est juste pas la un le compilateur dit.
Comme mentionné dans le commentaire il y a optimisation du compilateur. Voici un lien pour résoudre le problème (et de trouver l'itinéraire cause de l'accident)
xcode 6.1 comment faire pour désactiver l'optimisation (Swift)
Oui tournant qui conduit hors de la ligne qui a réellement besoin de remédier à
OriginalL'auteur Aggressor
J'ai eu le même problème que Palimondo. Heureusement, il s'agit simplement de faire en sorte que j'avais initialisé l'élément à l'avance. Dans mon code, j'ai été appeler une fonction pour insérer des images dans UIImageViews et en le passant dans un élément d'un tableau. Je n'avais pas encore chargé mon tableau avec la UIImageViews, et, par conséquent, lorsque le code s'exécute, il serait de dire que j'étais de passage dans une inexistant élément du tableau. Une fois que j'ai fait en sorte de charger mon tableau au début du programme, l'erreur a disparu.
OriginalL'auteur Not Your Average Coder