libc ++ abi.dylib: Beenden mit nicht erfasster Ausnahme vom Typ NSException (lldb)


185

Ich programmiere eine App schnell und wenn ich die Test-App auf dem iPhone-Simulator starte, funktioniert alles, aber dann versuche ich, nach rechts zu wischen. Dies ist eine Geste, die ich hinzugefügt habe, um zur nächsten Seite zu gelangen (View Controller Two). Es stürzt ab und zeigt diesen Fehlerbericht im Konsolenprotokoll an.

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) 

7
Es ist sehr wahrscheinlich, dass Sie etwas in einer NIB verkabelt haben, das nicht mehr existiert. Es sieht so aus, als würde der Absturz auftreten, wenn die Ansicht, zu der Sie wechseln möchten, geladen wird. Ich würde alle Steckdosen im Inspektorfenster (rechts) überprüfen und sicherstellen, dass sie vorhanden sind. Dies kann auch passieren, wenn Sie eine Schaltfläche mit einer IBAction verbunden haben, die nicht mehr existiert (oder umbenannt wurde)
cmyr

Es gibt nichts, was nicht verwendet wird und es gibt mir immer noch den Fehler.
Nick

Wenn Sie Xcode 8 mit Swift 2.3 Legacy-Modus verwenden, sehen Sie diese Antwort: stackoverflow.com/a/39548326/5175709
Honey

6
Im Allgemeinen gehen immer zu trösten, Hit , cmmd + Fso dass Sie innerhalb Konsole und die Suche nach suchen können Terminating app aufgrund nicht abgefangene Ausnahme , genau 1 Zeile nach , dass Sie sehen Grund: die Sie den Grund Ihrer App abgestürzt erzählt. (Ja, ich hatte diesen Fehler zu oft :)
Honey

1
Es kann auch hilfreich sein, einen Ausnahme-Haltepunkt unter Debug-> Haltepunkte zu erstellen . Der Debugger sollte dann hoffentlich in der Codezeile anhalten, in der sich das Problem befindet.
Chuck Boris

Antworten:


391

CMYR - "Dies kann auch passieren, wenn Sie eine Schaltfläche mit einer IBAction verbunden haben, die nicht mehr existiert (oder umbenannt wurde)."

Wenn Sie auf dieses Problem stoßen, stellen Sie sicher, dass Sie zu Main.storyboard gehen, klicken Sie mit der rechten Maustaste auf das gelbe Feldsymbol (View Controller) oben in der Telefonkontur und löschen Sie die Steckdose (n) mit gelben Flaggen.

In solchen Fällen haben Sie wahrscheinlich eine Aktion benannt und dann umbenannt. Sie müssen den alten Namen löschen und wenn dies das einzige Problem war, wird es sofort in sim gestartet!

Geben Sie hier die Bildbeschreibung ein


9
Tolle Antwort, danke! Dies ist ein schwerwiegender Fehler bei XCode. Die Fehlerbehandlung erfordert viel Entwicklung.
HyperionX

3
Ich hatte auch das Problem mit gelben Dreiecken, aber nur diese Dreiecke zu reparieren, löste den Absturz nicht für mich. :(
Andrej

Dies geschah mir, nachdem ich ein @IBOutlet umbenannt hatte
Mohammed Fadhl

Sollte noch einmal überprüfen, ob das Storyboard im Ziel enthalten ist oder nicht
hoangtuanfithou

Überprüfen Sie einfach die Outlets und
Álvaro Agüero

95

Haben Sie zufällig die Variable OS_ACTIVITY_MODE festgelegt? Gehen Sie in Xcode 9 wie folgt vor, um zu überprüfen, ob Sie diese Variable festgelegt (und deaktiviert) haben:

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


1
Vielen Dank! Aus diesem Grund habe ich keinen Absturzgrund gesehen: "Nicht erkannter Selektor an Klasse gesendet"
Denis Kutlubaev

14
Meine Güte, Apple. Ihre nicht behobenen Betriebssystemfehler zwingen uns, dies zu aktivieren, und dann verpassen wir wichtige Debugging-Meldungen. Schöner Fang, Siddhesh.
Nate

Vielen Dank, ich habe diese Variable vor einiger Zeit hinzugefügt und vergessen, sie zu deaktivieren. Du hast den Nagel auf den Kopf getroffen!
Rodrigo Recio

1
Wow danke, ohne das hätte ich meinen kleinen Käfer nie gefangen. Ja,
scheiß auf

Tatsächlich. Vielen Dank!
Senocico Stelian

85

In Xcode 9 und Swift 4:

Drucken Sie den Ausnahmestapel, um den Grund der Ausnahme zu ermitteln:

  1. Gehen Sie, um den Haltepunktnavigator anzuzeigen.
  2. Hinzufügen (+) Ausnahme-Haltepunkt hinzufügen.

  3. Wählen Sie den neuen Haltepunkt aus, klicken Sie bei gedrückter Ctrl-Taste auf Haltepunkt bearbeiten.

  4. Aktion hinzufügen und eingeben: po $ arg1

Geben Sie hier die Bildbeschreibung ein


3
Es sollte beachtet werden, dass die Aktion ein 'Debugger-Befehl' sein muss, da es verschiedene Optionen gibt, welche Art von Aktion zum Auslösen der Ausnahme ausgeführt werden soll. Aber es hat mir wirklich geholfen! Vielen Dank!
Todd

Beste Antwort! Manchmal habe ich diesen Fehler tief in Pods oder Bibliotheken ohne weitere Informationen bekommen. Nachdem ich Ihre Antwort vor Monaten gelesen hatte, habe ich sie viele Male benutzt und sie hat mir jedes Mal geholfen.
user8675

1
Diese Antwort sollte als "Wie man den Xcode-Debugger zum
Laufen bringt

Auf jeden Fall die beste Antwort, es hat mir sehr geholfen.
Okan Kurtuluş

8

In meinem Fall habe ich eine Delegate-Methode aufgerufen, aber die Methode wurde nicht deklariert.

Dieser Fehler ist allgemein und kann aus verschiedenen Gründen auftreten. Stellen Sie sicher, dass Sie Ihre Protokolle nicht deaktiviert haben, um zu sehen, was tatsächlich passiert ist. Aktivieren Sie OS_ACTIVITY_MODE in den Schemata, wenn Sie es deaktiviert haben. Sie haben es möglicherweise deaktiviert, um viele irrelevante Protokolle zu verhindern, aber sie sind praktisch.

Sie können die Ursache auch detaillierter verfolgen, indem Sie einen Ausnahme-Haltepunkt hinzufügen po $arg1. Wie bereits von Ahmed-Lotfi erwähnt

Hier ist eine allgemeine Checkliste, die Sie durchgehen können.

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.

1
Schöne Liste! In meinem Fall hatte ich vergessen, die Kennung meiner benutzerdefinierten Zelle zu registrieren. Es könnte sich lohnen, Ihrer Liste etwas hinzuzufügen, da dies eine einfache Sache sein kann, die leicht zu vergessen ist.
Luismgb

7

Andere Lösungen haben bei mir nicht funktioniert, hier ist meine. Dies gilt nur für Xcode 8, wenn es im Swift 2.3 Legacy-Modus ausgeführt wird:

Anscheinend versucht Interface Builder, die Methode umzubenennen, die mit der Schaltfläche verbunden werden soll.

Hier ist ein Radar mit mehr Details.

Die Lösung (Problemumgehung) besteht darin, den Methodenparameternamen manuell durch Folgendes zu ersetzen _:

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

Ändern Sie dies:

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

5

Es könnte auch ein falscher Name für die Segue-ID sein. Z.B -

performSegueWithIdentifier("wrongSegueName", sender: self)

4

Meine Situation war etwas anders, ich habe versucht, mich in eine zu verwandeln UINavigationController , und was es für mich reparierte, war, den Hauptteil der Warteschlange zu bekommen.

Für Ziel-C:

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

Für Swift 3:

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

3

Dies begann für mich auf Xcode 7 zu passieren, und ich hatte keine Steckdosen mit gelben Flaggen, die ich löschen konnte.

Das einzige, was für mich funktioniert hat, war das Ersetzen dieser Zeile im AppDelegate:

[window addSubview:viewController.view];

zu:

[window setRootViewController:viewController];

3

Für mich lag das Problem in meiner IBAction mit einem UIButton.

Wenn Sie Strg + Ziehen drücken, um eine IBAction aus einem UIButton zu erstellen, müssen Sie "UIButton" aus der Dropdown-Liste "Typ" auswählen. Die Standardauswahl von AnyObject führt zum Absturz der App, wenn Sie auf den UIButton tippen.

Geben Sie hier die Bildbeschreibung ein


Ich hatte den Aktionstyp auf AnyObject gesetzt, aber in meinem Fall hat es nicht funktioniert.
Andrej

Wenn Sie meinen Beitrag lesen, mache ich darauf aufmerksam, dass AnyObject nicht funktioniert, wie Sie festgestellt haben.
Chris Livdahl

3

Es könnte auch eine gebrochene Triggered Segues, Scheck in Ihrem Storyboard sein, sobald Sie wieder an die segues oder Steckdose alles wieder funktionieren sollte.

Überprüfen Sie die Segues

Stellen Sie sicher, dass der IdentifierSegue korrekt und Ihrem Code ähnlich ist .

Geben Sie hier die Bildbeschreibung ein


2

Dieses Problem trat auf, als ich den Namen der Variablen änderte, die mit einer meiner Schaltflächen verbunden war. Denken Sie also daran!


2

Ich bin neu in Xcode, daher habe ich einige Stunden gebraucht, um das Problem herauszufinden und die XLS-Datei zu laden. Ich habe die meisten Beispielcodes dort oben durchgearbeitet und keiner von ihnen löst den angezeigten Fehler-Xcode.

Die Lösung, die ich gefunden habe, war, dass wir das 'Zu Zielen hinzufügen' angeben müssen, um das hinzuzufügende Projekt anzukreuzen, wenn wir die XLS-Datei per Drag & Drop in Projekt -> Unterstützende Dateien in Xcode importieren.


1

Möglicherweise gibt es mehr als eine IBAction für eine Schaltfläche in Ihrem Ansichts-Controller. Versuchen Sie, diese herauszufinden, und entfernen Sie alle vorherigen Elemente für diese Schaltfläche in Ihrem Controller, und erstellen Sie eine neue Schaltfläche. Dadurch wird Ihr Problem gelöst.


1

Stellen Sie sicher, dass Sie keine relativen Einschränkungen dynamisch auf eine Ansicht anwenden, die noch nicht in der Ansichtshierarchie vorhanden ist.

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;

Im obigen Beispiel wurde bottomView Teil der Ansichtshierarchie, bevor relative Einschränkungen angewendet wurden.


1

Ich habe diesen Fehler auf zwei Arten erhalten:

Ich habe diesen Fehler erhalten, als ich in einen anderen UIViewController gepusht habe.

JEDOCH habe ich versehentlich die andere Klasse von untergeordnet UITabBarController und bekam diesen Fehler.

Wie habe ich es repariert? Ich habe eine Unterklasse von UIViewControllerund ich stürzte nicht mehr ab :)


Ich wollte kein Storyboard verwenden. Also habe ich es gelöscht. Doch vergesse ich seine Referenz in dem Projekt löschen Einstellungen . Ich habe gerade auf das Projekt >> Allgemein >> Bereitstellungsinformationen >> geklickt und dann die Hauptschnittstelle auf Leerzeichen gesetzt. (Es wurde zuvor auf main gesetzt)

Wie Sie in beiden Situationen sehen können, wird beim Zugriff auf ein vorhandenes Objekt eine Fehlermeldung angezeigt ...


1

Ich werde mein Problem zur Liste der möglichen Lösungen hinzufügen, falls jemand anderes auf diesen Thread stößt.

TableView-Zellenkennung. Stellen Sie zunächst sicher, dass Ihre Zelle eine Kennung hat. Stellen Sie zweitens sicher, dass Sie auf diese Kennung verweisen, wenn Sie die Zelle aus der Warteschlange entfernen.


1

Swift 4 :

Ich habe diesen Fehler aufgrund einer Änderung in der UIVisualEffectView-API erhalten. In Swift 3 war dies in Ordnung: myVisuallEffectView.addSubview(someSubview)

Aber in Swift 4 musste ich das ändern: myVisualEffectView.contentView.addSubview(someSubview)


1

Ich hatte den gleichen Fehler, als ich beim Erstellen von Einschränkungen mithilfe des visuellen Formatierers einen Tippfehler für eine der Ansichten hatte. Ich hoffe das hilft jemandem ... oder mir eines Tages wieder.




0

Für meinen Fall, Xcode 8.2.1 , hatte ich eine Map Kit-Ansicht in einem Ansichts-Controller. Also ging ich zu

Phasen erstellen> Binär mit Bibliotheken verknüpfen

und hinzugefügt MapKit.framework , dann war es in Ordnung.

Ich denke, dies gilt auch für andere Ansichten, die einen Rahmen erfordern.

PS Unter iOS 9 wurde mir mitgeteilt, dass ein Problem mit Map Kit View aufgetreten ist, während mir unter iOS 10 nichts mitgeteilt wurde!


0

Nur die "Drop Armageddon" -Lösung hat bei mir funktioniert:

  • App vom Gerät entfernen
  • sauberes Projekt
  • Führen Sie eine Neuinstallation auf dem Gerät aus

0

In meinem Fall wurde XCode müde und konnte die App mit dieser Nachricht nicht starten, da die Behauptung fehlschlug (dies wurde durch unseren Code festgelegt).

Das Ausführen auf einem anderen Gerät zeigte den Assertionsfehler, den wir beheben konnten, und alles wurde wieder normal.


0

Für Swift 2.3

Dies scheint ein Fehler bei Xcode 8 und Swift 2.3 zu sein. Wenn Sie die Schaltflächenaktion über das Storyboard mit Ihrem Code verbinden, stellen Sie sicher, dass Xcode die Aktion nicht umbenannt hat. Für mich wird ein withSender hinzugefügt: am Ende der Methoden Ich gehe also zu meinem Code und benenne die Methode so um, dass sie mit der von Xcode geschriebenen übereinstimmt.

Überprüfen Sie für jede andere Version die richtige Antwort.


0

In meinem Fall war es InterfaceBuilder. Ich hatte einige Ansichten von einem anderen ViewController kopiert, wodurch die Einschränkungen durcheinander gebracht wurden.

In InterfaceBuilder hatte ich den roten Pfeilfehler auf dem ViewController.

Während der Ausführung stürzte die App ab.


0

In meinem Fall stürzte die App ab, weil ich die Zielmitgliedschaft des Storyboards nicht festgelegt hatte.


0

In meinem Fall Build Settingsenthielt das Projekt einige nicht vorhandene Verzeichnisse für Framework Search Pathsund Library Search Paths.


0

Ich hatte zwei Probleme:

1) In meinem Ziel war der in der Storyboard-Datei verwendete View Controller nicht enthalten.

2) Mein Storyboard war ungefähr 3 Jahre alt. Ich musste einen der Ansichts-Controller in der Registerkartenleiste von Grund auf neu erstellen (es hatte nur ein UITextField und ich weiß immer noch nicht, warum es nicht funktionierte).


0

Noch eine mögliche Ursache:

In meinem Fall hatte ich eine xibund rief Bundle.main.loadNibNamed(...an , an welchem ​​Punkt es abstürzte. Alles meine IBOutletsund IBActionsschien in Ordnung. Am Ende bemerkte ich, dass das nibtatsächlich geladen wurde, aber als ich dann versuchte, auf die erste (und einzige) Ansicht ( nib.first) zuzugreifen , funktionierte das nicht. Tatsächlich nib.countwurde anstelle der erwarteten eine sehr große Ganzzahl (max int?) Zurückgegeben 1. Ich habe versucht, die Ansicht erneut hinzuzufügen, aber immer noch kein Glück.

Am Ende habe ich die gesamte xibDatei gelöscht und erneut gestartet (aber ich habe einige der Ansichten in meiner Zwischenablage beibehalten, damit ich sie einfügen kann, anstatt sie erneut zu erstellen).

Das hat funktioniert!


0

Dies kann passieren, wenn Sie eine Tabelle haben und vergessen, der Klasse UITableViewDelegate und UITableViewDataSource zuzuweisen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.